Add graceful stopping to server, and extend middleware and pipeline logic

This commit is contained in:
Pablu23
2025-10-01 14:36:30 +02:00
parent 66f2811fff
commit 572e1177ef
5 changed files with 113 additions and 25 deletions

View File

@@ -5,14 +5,52 @@ import (
"slices"
)
type Middleware func(http.Handler) http.Handler
type Middleware interface {
Use(http.Handler) http.Handler
Manage()
Stop()
}
func Pipeline(funcs ...Middleware) Middleware {
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(funcs) {
next = m(next)
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
// }
// }