// 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) }
// statusStackHandler returns the status of the Stack. func (c *Conn) statusStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { stack.Read(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) }
// deleteStackHandler deletes the Stack from a database. func (c *Conn) deleteStackHandler(w http.ResponseWriter, r *http.Request, database *pila.Database, stack *pila.Stack) { stack.Flush() // Do not check output as we validated that // stack always exists. _ = database.RemoveStack(stack.ID) log.Println(r.Method, r.URL, http.StatusNoContent) w.WriteHeader(http.StatusNoContent) return }
// 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) }
// 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) }
// sizeStackHandler returns the size of the Stack. func (c *Conn) sizeStackHandler(w http.ResponseWriter, r *http.Request, stack *pila.Stack) { stack.Read(c.opDate) log.Println(r.Method, r.URL, http.StatusOK, stack.Size()) w.Header().Set("Content-Type", "application/json") // Do not check error as we consider the size // of a stack valid for a JSON encoding. w.Write(stack.SizeToJSON()) }