25 lines
498 B
Go
25 lines
498 B
Go
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
|
||
|
|
}
|