57 lines
935 B
Go
57 lines
935 B
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
"slices"
|
|
)
|
|
|
|
type Middleware interface {
|
|
Use(http.Handler) http.Handler
|
|
Manage()
|
|
Stop()
|
|
}
|
|
|
|
type Pipeline struct {
|
|
middleware []Middleware
|
|
}
|
|
|
|
func NewPipeline() *Pipeline {
|
|
return &Pipeline{}
|
|
}
|
|
|
|
func (p *Pipeline) AddMiddleware(m Middleware) {
|
|
p.middleware = append(p.middleware, m)
|
|
}
|
|
|
|
func (p *Pipeline) Use() func(http.Handler) http.Handler {
|
|
return func(next http.Handler) http.Handler {
|
|
for _, m := range slices.Backward(p.middleware) {
|
|
next = m.Use(next)
|
|
}
|
|
|
|
return next
|
|
}
|
|
}
|
|
|
|
func (p *Pipeline) Stop() {
|
|
for _, m := range p.middleware {
|
|
m.Stop()
|
|
}
|
|
}
|
|
|
|
func (p *Pipeline) Manage() {
|
|
for _, m := range p.middleware {
|
|
go m.Manage()
|
|
}
|
|
}
|
|
|
|
// func Pipeline(funcs ...Middleware) func(http.Handler) http.Handler {
|
|
// return func(next http.Handler) http.Handler {
|
|
// for _, m := range slices.Backward(funcs) {
|
|
// next = m.Use(next)
|
|
// }
|
|
//
|
|
// return next
|
|
// }
|
|
// }
|