package middleware import ( "net/http" ) type Middleware func(http.Handler) http.Handler type MiddlewareChain []Middleware func (c MiddlewareChain) Then(finalHandler http.Handler) http.Handler { for i := len(c) - 1; i >= 0; i-- { finalHandler = c[i](finalHandler) } return finalHandler } func (c MiddlewareChain) ThenFunc(finalHandler http.HandlerFunc) http.Handler { result := http.Handler(finalHandler) for i := len(c) - 1; i >= 0; i-- { result = c[i](result) } return result }