2023-07-18 21:48:38 +02:00

52 lines
1.2 KiB
Go

package server
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++
}