diff options
Diffstat (limited to 'vendor/github.com/go-zoo/bone/bone.go')
-rw-r--r-- | vendor/github.com/go-zoo/bone/bone.go | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/github.com/go-zoo/bone/bone.go b/vendor/github.com/go-zoo/bone/bone.go new file mode 100644 index 000000000..d00a0b083 --- /dev/null +++ b/vendor/github.com/go-zoo/bone/bone.go @@ -0,0 +1,74 @@ +/******************************** +*** Multiplexer for Go *** +*** Bone is under MIT license *** +*** Code by CodingFerret *** +*** github.com/go-zoo *** +*********************************/ + +package bone + +import ( + "net/http" + "strings" +) + +// Mux have routes and a notFound handler +// Route: all the registred route +// notFound: 404 handler, default http.NotFound if not provided +type Mux struct { + Routes map[string][]*Route + prefix string + notFound http.Handler + Serve func(rw http.ResponseWriter, req *http.Request) + CaseSensitive bool +} + +var ( + static = "static" + method = []string{"GET", "POST", "PUT", "DELETE", "HEAD", "PATCH", "OPTIONS"} +) + +type adapter func(*Mux) *Mux + +// New create a pointer to a Mux instance +func New(adapters ...adapter) *Mux { + m := &Mux{Routes: make(map[string][]*Route), Serve: nil, CaseSensitive: true} + for _, adap := range adapters { + adap(m) + } + if m.Serve == nil { + m.Serve = m.DefaultServe + } + return m +} + +// Prefix set a default prefix for all routes registred on the router +func (m *Mux) Prefix(p string) *Mux { + m.prefix = strings.TrimSuffix(p, "/") + return m +} + +// DefaultServe is the default http request handler +func (m *Mux) DefaultServe(rw http.ResponseWriter, req *http.Request) { + // Check if a route match + if !m.parse(rw, req) { + // Check if it's a static ressource + if !m.staticRoute(rw, req) { + // Check if the request path doesn't end with / + if !m.validate(rw, req) { + // Check if same route exists for another HTTP method + if !m.otherMethods(rw, req) { + m.HandleNotFound(rw, req) + } + } + } + } +} + +// ServeHTTP pass the request to the serve method of Mux +func (m *Mux) ServeHTTP(rw http.ResponseWriter, req *http.Request) { + if !m.CaseSensitive { + req.URL.Path = strings.ToLower(req.URL.Path) + } + m.Serve(rw, req) +} |