middleware.go 712 B

12345678910111213141516171819202122232425262728293031
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package middleware
  5. import (
  6. "net/http"
  7. )
  8. type Middleware func(http.Handler) http.Handler
  9. type MiddlewareChain struct {
  10. middlewares []Middleware
  11. }
  12. func (m *MiddlewareChain) Wrap(h http.Handler) http.Handler {
  13. for i := range m.middlewares {
  14. h = m.middlewares[len(m.middlewares)-1-i](h)
  15. }
  16. return h
  17. }
  18. func (m *MiddlewareChain) WrapFunc(fn http.HandlerFunc) http.Handler {
  19. return m.Wrap(fn)
  20. }
  21. func NewMiddlewareChain(middlewares ...Middleware) *MiddlewareChain {
  22. return &MiddlewareChain{append(([]Middleware)(nil), middlewares...)}
  23. }