package response import "net/http" type ( Mux struct { Mux *http.ServeMux middleware []Middleware } Middleware = func(HandlerFunc) HandlerFunc ) func NewMux(ms ...Middleware) *Mux { return &Mux{ Mux: http.NewServeMux(), middleware: ms, } } func (m *Mux) Handle(pattern string, fn HandlerFunc) { for _, mw := range m.middleware { prev := fn fn = mw(func(r *http.Request) (Response, error) { return prev(r) }) } m.Mux.Handle(pattern, Handler(fn)) } func (m *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) { m.Mux.ServeHTTP(w, r) }