Files
go-tower/group.go

72 lines
2.0 KiB
Go

package tower
import (
"net/http"
)
type Group struct {
prefix string
parent *Tower
groupMiddlewares []Middleware
}
func (g *Group) Use(groupMiddlewares ...Middleware) {
g.groupMiddlewares = append(g.groupMiddlewares, groupMiddlewares...)
}
func (g *Group) Group(prefix string, mws ...Middleware) *Group {
child := &Group{
parent: g.parent,
prefix: buildFullPath(g.prefix, prefix),
}
child.groupMiddlewares = make([]Middleware, 0, len(g.groupMiddlewares)+len(mws))
child.groupMiddlewares = append(child.groupMiddlewares, g.groupMiddlewares...)
child.groupMiddlewares = append(child.groupMiddlewares, mws...)
return child
}
func (g *Group) Static(prefix, dir string) {
if prefix == "" || prefix[0] != '/' {
prefix = "/" + prefix
}
if prefix[len(prefix)-1] == '/' {
prefix = prefix[:len(prefix)-1]
}
prefix += "/*filepath"
g.parent.router.ServeFiles(buildFullPath(g.prefix, prefix), http.Dir(dir))
}
func (g *Group) GET(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodGet, path, h, routeMiddlewares...)
}
func (g *Group) POST(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodPost, path, h, routeMiddlewares...)
}
func (g *Group) PUT(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodPut, path, h, routeMiddlewares...)
}
func (g *Group) PATCH(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodPatch, path, h, routeMiddlewares...)
}
func (g *Group) DELETE(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodDelete, path, h, routeMiddlewares...)
}
func (g *Group) Handle(method string, path string, h Handler, routeMiddlewares ...Middleware) {
fullPath := buildFullPath(g.prefix, path)
mws := make([]Middleware, 0, len(g.groupMiddlewares)+len(routeMiddlewares))
mws = append(mws, g.groupMiddlewares...)
mws = append(mws, routeMiddlewares...)
g.parent.Handle(method, fullPath, h, mws...)
}