37 lines
633 B
Go
37 lines
633 B
Go
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)
|
|
}
|