efritz/chevron

View on GitHub
middleware_options.go

Summary

Maintainability
A
0 mins
Test Coverage
package chevron

type (
    // MiddlewareConfigFunc is a function that decorates a map from HTTP methods
    // to handlers.
    MiddlewareConfigFunc func(handlerMap) error
)

// WithMiddleware applies the given middleware to all HTTP methods in the
// handler map.
func WithMiddleware(middleware Middleware) MiddlewareConfigFunc {
    return func(hm handlerMap) error {
        return applyMiddleware(middleware, hm, allMethods)
    }
}

// WithMiddlewareFor applies the given middleware to the provided HTTP
// methods in the handler map.
func WithMiddlewareFor(middleware Middleware, methods ...Method) MiddlewareConfigFunc {
    return func(hm handlerMap) error {
        return applyMiddleware(middleware, hm, methods)
    }
}

func applyMiddleware(middleware Middleware, hm handlerMap, methods []Method) error {
    for _, method := range methods {
        wrapped, err := middleware.Convert(hm[method])
        if err != nil {
            return err
        }

        hm[method] = wrapped
    }

    return nil
}