Routes() returns the function name of the main handler

This commit is contained in:
Manu Mtz-Almeida 2015-06-07 13:49:36 +02:00
parent c7d2d82d01
commit 74fe36fa48
2 changed files with 21 additions and 13 deletions

View File

@ -16,7 +16,7 @@ func IsDebugging() bool {
func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) {
if IsDebugging() {
nuHandlers := len(handlers)
handlerName := nameOfFunction(handlers[nuHandlers-1])
handlerName := nameOfFunction(handlers.Last())
debugPrint("%-5s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)
}
}

28
gin.go
View File

@ -64,9 +64,18 @@ type (
RouteInfo struct {
Method string
Path string
Handler string
}
)
func (c HandlersChain) Last() HandlerFunc {
length := len(c)
if length > 0 {
return c[length-1]
}
return nil
}
// Returns a new blank Engine instance without any middleware attached.
// The most basic configuration
func New() *Engine {
@ -176,23 +185,22 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {
func (engine *Engine) Routes() (routes []RouteInfo) {
for _, tree := range engine.trees {
for _, path := range iterate("", nil, tree.root) {
routes = append(routes, RouteInfo{
Method: tree.method,
Path: path,
})
}
routes = iterate("", tree.method, routes, tree.root)
}
return routes
}
func iterate(path string, routes []string, root *node) []string {
func iterate(path, method string, routes []RouteInfo, root *node) []RouteInfo {
path += root.path
if root.handlers != nil {
routes = append(routes, path)
if len(root.handlers) > 0 {
routes = append(routes, RouteInfo{
Method: method,
Path: path,
Handler: nameOfFunction(root.handlers.Last()),
})
}
for _, node := range root.children {
routes = iterate(path, routes, node)
routes = iterate(path, method, routes, node)
}
return routes
}