// pushStackHandler adds an element into a Stack and returns 200 and the element. func (c *Conn) pushStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { if r.Body == nil { log.Println(r.Method, r.URL, http.StatusBadRequest, "no element provided") w.WriteHeader(http.StatusBadRequest) return } var element pila.Element 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 } stack.Push(element.Value) stack.Update(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) }
// flushStackHandler flushes the Stack, setting the size to 0 and emptying all // the content. func (c *Conn) flushStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { stack.Flush() stack.Update(c.opDate) log.Println(r.Method, r.URL, http.StatusOK) w.Header().Set("Content-Type", "application/json") // Do not check error as we consider that a flushed // stack has no JSON encoding issues. b, _ := stack.Status().ToJSON() w.Write(b) }
// popStackHandler extracts the peek element of a Stack, returns 200 and returns it. func (c *Conn) popStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { value, ok := stack.Pop() if !ok { log.Println(r.Method, r.URL, http.StatusNoContent) w.WriteHeader(http.StatusNoContent) return } stack.Update(c.opDate) element := pila.Element{Value: value} 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) }