refactor: move Middleware interface to sinle function class
This commit is contained in:
@@ -4,11 +4,10 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Middleware interface {
|
||||
Serve(r http.HandlerFunc) http.HandlerFunc
|
||||
}
|
||||
type Middleware func(next http.Handler) http.Handler
|
||||
|
||||
type MiddlewaredReponse struct {
|
||||
w http.ResponseWriter
|
||||
@@ -21,6 +20,7 @@ func NewMiddlewaredResponse(w http.ResponseWriter) *MiddlewaredReponse {
|
||||
}
|
||||
|
||||
func (m *MiddlewaredReponse) WriteHeader(s int) {
|
||||
m.Header().Set("Status", strconv.Itoa(s))
|
||||
m.statuses = append(m.statuses, s)
|
||||
}
|
||||
|
||||
|
||||
@@ -62,15 +62,15 @@ func (rt *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
rt.serveHttp(w, r)
|
||||
}
|
||||
|
||||
func (r *Router) wrapMiddlewares(ms []middleware.Middleware, h http.HandlerFunc) http.HandlerFunc {
|
||||
wh := h.ServeHTTP
|
||||
func (r *Router) wrapMiddlewares(ms []middleware.Middleware, h http.Handler) http.HandlerFunc {
|
||||
wh := h
|
||||
for _, m := range ms {
|
||||
wh = m.Serve(wh)
|
||||
wh = m(wh)
|
||||
}
|
||||
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
mw := middleware.NewMiddlewaredResponse(w)
|
||||
wh(mw, r)
|
||||
wh.ServeHTTP(mw, r)
|
||||
if _, err := mw.ReallyWriteHeader(); err != nil {
|
||||
_, _ = w.Write(
|
||||
[]byte(
|
||||
|
||||
Reference in New Issue
Block a user