35 lines
584 B
Go
35 lines
584 B
Go
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)
|
|
}
|