uniugm/admin/lib/web/desc.go

58 lines
1.5 KiB
Go
Raw Normal View History

2025-04-22 15:46:48 +08:00
package web
type routesPath struct {
method string // get|post|put|delete
desc string
permit int
handlers []HandlerFunc
}
type routesNode struct {
path string
methods []*routesPath
child []*routesNode
}
func newRoutesNode(method, path string, desc string, permit int, handlers ...HandlerFunc) *routesNode {
n := &routesNode{
path: path,
}
n.addMethod(method, desc, permit, handlers)
return n
}
func (n *routesNode) addChildren(method, path string, desc string, permit int, handlers ...HandlerFunc) *routesNode {
for _, c := range n.child {
if c.path == path {
c.addMethod(method, desc, permit, handlers)
return c
}
}
children := newRoutesNode(method, path, desc, permit, handlers)
n.child = append(n.child, children)
return children
}
func (n *routesNode) addMethod(method string, desc string, permit int, handlers ...HandlerFunc) *routesNode {
n.methods = append(n.methods, &routesPath{method: method, desc: desc, permit: permit, handlers: handlers})
return n
}
2025-04-24 20:39:31 +08:00
func (n *routesNode) travel(parentPath string, parentDesc string, travelFun func(parentPath, parentDesc string, path string, method string, handlers ...HandlerFunc)) {
2025-04-22 15:46:48 +08:00
curPath := parentPath + n.path
curNodeDesc := ""
if len(n.methods) > 0 {
for _, method := range n.methods {
if method.method == "" {
curNodeDesc = method.desc
continue
}
2025-04-24 20:39:31 +08:00
travelFun(parentPath, parentDesc, curPath, method.method, method.handlers)
2025-04-22 15:46:48 +08:00
}
}
for _, c := range n.child {
c.travel(curPath, curNodeDesc, travelFun)
}
}