/
businesshandler.go
60 lines (49 loc) · 1.37 KB
/
businesshandler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package cmdroutes
import (
"github.com/Necroforger/dgrouter/exrouter"
)
type Route interface {
GetCommand() string
GetDescription() string
}
type DefaultRouteHandler interface {
Handle(ctx *exrouter.Context)
}
type CustomRouteHandler interface {
Register(router *exrouter.Route) *exrouter.Route
}
type SubRoute interface {
Route
GetSubRoutes() []Route
}
func registerHelpHandler(router *exrouter.Route) {
route := NewHelpRoute(router)
registerRoute(route, router)
}
func registerRoute(route Route, router *exrouter.Route) *exrouter.Route {
prefix := route.GetCommand()
var newRouter *exrouter.Route
if handlerHandler, ok := route.(DefaultRouteHandler); ok {
newRouter = router.On(prefix, handlerHandler.Handle)
}
if routeHandler, ok := route.(CustomRouteHandler); ok {
newRouter = routeHandler.Register(router)
}
newRouter.Desc(route.GetDescription())
return newRouter
}
func RegisterRoutes(router *exrouter.Route, routes ...Route) {
for _, route := range routes {
registerHelpHandler(router)
rootRouter := registerRoute(route, router)
if subRoute, ok := route.(SubRoute); ok {
if subRouteHandlers := subRoute.GetSubRoutes(); subRouteHandlers != nil {
registerHelpHandler(rootRouter)
for _, handler := range subRouteHandlers {
registerRoute(handler, rootRouter)
}
}
}
//log.Printf("Handlers registered: %s", route.GetCommand())
}
}