/
warpmiddleware.go
29 lines (25 loc) · 1.05 KB
/
warpmiddleware.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package muxhttp
// Middleware is a function designed to run some code before and/or after
// another Handler. It is designed to remove boilerplate or other concerns not
// direct to any given Handler.
type Middleware func(Handler) Handler
// wrapMiddleware creates a new handler by wrapping middlewarefunc around a final
// handler. The middlewares' Handlers will be executed by requests in the order
// they are provided.
func wrapMiddleware(mws []Middleware, handler Handler) Handler {
// Loop backwards through the middlewarefunc invoking each one. Replace the
// handler with the new wrapped handler. Looping backwards ensures that the
// first middlewarefunc of the slice is the first to be executed by requests.
for i := len(mws) - 1; i >= 0; i-- {
mw := mws[i]
if mw != nil {
// last middle ware wraps first
// so in this list
// appserver := web.NewRouter(log, mid.Errors(log), mid.Metrics())
// the last middlewarefunc mid.Metrics h is wrapped initially
// and then mid.Errors h is wrapped
handler = mw(handler)
}
}
return handler
}