// configKeyHandler handles a config value. func (c *Conn) configKeyHandler(configKey string) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) // we override the mux vars to be able to test // an arbitrary configKey if configKey != "" { vars = map[string]string{ "key": configKey, } } value := c.Config.Get(vars["key"]) if value == nil { c.goneHandler(w, r, fmt.Sprintf("%s is not set", vars["key"])) return } var element pila.Element if r.Method == "GET" { value := c.Config.Get(vars["key"]) element.Value = value } if r.Method == "POST" { if r.Body == nil { log.Println(r.Method, r.URL, http.StatusBadRequest, "no element provided") w.WriteHeader(http.StatusBadRequest) return } err := element.Decode(r.Body) if err != nil { log.Println(r.Method, r.URL, http.StatusBadRequest, "error on decoding element:", err) w.WriteHeader(http.StatusBadRequest) return } c.Config.Set(vars["key"], element.Value) } log.Println(r.Method, r.URL, http.StatusOK, element.Value) w.Header().Set("Content-Type", "application/json") b, err := element.ToJSON() if err != nil { log.Println(r.Method, r.URL, http.StatusBadRequest, "error on decoding element:", err) w.WriteHeader(http.StatusBadRequest) return } w.Write(b) }) }
// peekStackHandler returns the peek of the Stack without modifying it. func (c *Conn) peekStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { var element pila.Element element.Value = stack.Peek() stack.Read(c.opDate) log.Println(r.Method, r.URL, http.StatusOK, element.Value) w.Header().Set("Content-Type", "application/json") // Do not check error as we consider our element // suitable for a JSON encoding. b, _ := element.ToJSON() w.Write(b) }