package aero import ( "net/http" ) // maxParams defines the maximum number of parameters per route. const maxParams = 16 // Context represents the interface for a request & response context. type Context interface { Bytes([]byte) error Error(int, error) error } // context represents a request & response context. type context struct { request *http.Request response http.ResponseWriter paramNames [maxParams]string paramValues [maxParams]string paramCount int } // newContext returns a new context from the pool. func newContext(request *http.Request, response http.ResponseWriter) *context { ctx := contextPool.Get().(*context) ctx.request = request ctx.response = response ctx.paramCount = 0 return ctx } // Bytes responds with a raw byte slice. func (ctx *context) Bytes(body []byte) error { _, err := ctx.response.Write(body) return err } // Error is used for sending error messages to the client. func (ctx *context) Error(status int, err error) error { ctx.response.WriteHeader(status) return err } // addParameter adds a new parameter to the context. func (ctx *context) addParameter(name string, value string) { ctx.paramNames[ctx.paramCount] = name ctx.paramValues[ctx.paramCount] = value ctx.paramCount++ }