File size: 720 Bytes
fea99b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package operation
// Middleware is a chainable function that wraps an [Operation].
type Middleware[Request any, Response any] func(Operation[Request, Response]) Operation[Request, Response]
// Chain is a helper function for composing middlewares. Requests will
// traverse them in the order they're declared. That is, the first middleware
// is treated as the outermost middleware.
func Chain[Request any, Response any](outer Middleware[Request, Response], others ...Middleware[Request, Response]) Middleware[Request, Response] {
return func(next Operation[Request, Response]) Operation[Request, Response] {
for i := len(others) - 1; i >= 0; i-- { // reverse
next = others[i](next)
}
return outer(next)
}
}
|