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