package middleware import ( ctxpkg "github.com/noahlann/nnet/pkg/context" ) // Middleware 中间件接口 type Middleware func(ctx ctxpkg.Context, next Handler) error // Handler 处理器 type Handler func(ctx ctxpkg.Context) error // Chain 中间件链 type Chain struct { middlewares []Middleware } // NewChain 创建中间件链 func NewChain(middlewares ...Middleware) *Chain { return &Chain{ middlewares: middlewares, } } // Then 执行中间件链 func (c *Chain) Then(handler Handler) Handler { for i := len(c.middlewares) - 1; i >= 0; i-- { handler = c.wrapHandler(c.middlewares[i], handler) } return handler } // wrapHandler 包装处理器 func (c *Chain) wrapHandler(middleware Middleware, handler Handler) Handler { return func(ctx ctxpkg.Context) error { return middleware(ctx, handler) } }