func productsHandler(api *apidb.Api) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { setHeaders(w, r) if r.Method == "GET" { js, err := json.Marshal(api.GetAllProducts()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.Write(js) } else if r.Method == "PUT" { decoder := json.NewDecoder(r.Body) var product apidb.Product err := decoder.Decode(&product) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } js, err := json.Marshal(api.AddProduct(product)) w.Header().Set("Content-Type", "application/json") w.Write(js) } } }