65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package docgen
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
type Doc struct {
|
|
Router DocRouter `json:"router"`
|
|
}
|
|
|
|
type DocRouter struct {
|
|
Middlewares []DocMiddleware `json:"middlewares"`
|
|
Routes DocRoutes `json:"routes"`
|
|
}
|
|
|
|
type DocMiddleware struct {
|
|
FuncInfo
|
|
}
|
|
|
|
type DocRoute struct {
|
|
Pattern string `json:"-"`
|
|
Handlers DocHandlers `json:"handlers,omitempty"`
|
|
Router *DocRouter `json:"router,omitempty"`
|
|
}
|
|
|
|
type DocRoutes map[string]DocRoute // Pattern : DocRoute
|
|
|
|
type DocHandler struct {
|
|
Middlewares []DocMiddleware `json:"middlewares"`
|
|
Method string `json:"method"`
|
|
FuncInfo
|
|
}
|
|
|
|
type DocHandlers map[string]DocHandler // Method : DocHandler
|
|
|
|
func PrintRoutes(r chi.Routes) {
|
|
var printRoutes func(parentPattern string, r chi.Routes)
|
|
printRoutes = func(parentPattern string, r chi.Routes) {
|
|
rts := r.Routes()
|
|
for _, rt := range rts {
|
|
if rt.SubRoutes == nil {
|
|
fmt.Println(parentPattern + rt.Pattern)
|
|
} else {
|
|
pat := rt.Pattern
|
|
|
|
subRoutes := rt.SubRoutes
|
|
printRoutes(parentPattern+pat, subRoutes)
|
|
}
|
|
}
|
|
}
|
|
printRoutes("", r)
|
|
}
|
|
|
|
func JSONRoutesDoc(r chi.Routes) string {
|
|
doc, _ := BuildDoc(r)
|
|
v, err := json.MarshalIndent(doc, "", " ")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return string(v)
|
|
}
|