-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.go
36 lines (29 loc) · 917 Bytes
/
middleware.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
30
31
32
33
34
35
36
package middleware
import (
"github.com/valyala/fasthttp"
)
type Middleware interface {
Handle() func(next fasthttp.RequestHandler) fasthttp.RequestHandler
}
type Middlewares struct {
Handles []Middleware
}
var DefaultMiddlewares = Middlewares{
Handles: []Middleware{&Logger{}, &Recovery{}},
}
// NewMiddlewares returns middlewares
func NewMiddlewares(middlewares ...Middleware) Middlewares {
return Middlewares{Handles: append([]Middleware{}, middlewares...)}
}
func (m Middlewares) Apply(h fasthttp.RequestHandler) fasthttp.RequestHandler {
for i := len(m.Handles) - 1; i > -1; i-- {
invoke := m.Handles[i].Handle()
h = invoke(h)
}
return h
}
// Append copy all middleware layers to newLayers, then append middlewares to newLayers, then return a new middleware onion.
func (m Middlewares) Append(middlewares ...Middleware) Middlewares {
m.Handles = append(m.Handles, middlewares...)
return m
}