76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"google.golang.org/protobuf/compiler/protogen"
|
|
"text/template"
|
|
)
|
|
|
|
type generateRouterMethod struct {
|
|
MethodName string
|
|
InputName string
|
|
OutputName string
|
|
API string
|
|
Author string
|
|
Describe string
|
|
Method string
|
|
}
|
|
|
|
type generateRouters struct {
|
|
StructName string
|
|
BaseURL string
|
|
GenTo string
|
|
Methods []generateRouterMethod
|
|
}
|
|
|
|
const routerGenerateTpl = `type AutoGen{{.StructName}}Impl interface { ` + `{{range .Methods}}
|
|
{{.MethodName}}(ctx *core.Context, req *{{.InputName}}) (resp *{{.OutputName}}, err error){{end}}
|
|
}
|
|
var (
|
|
AutoGen{{.StructName}} = &core.Routers{
|
|
BaseURL: "{{.BaseURL}}",
|
|
Apis: core.RouterMap{ {{range .Methods}}
|
|
"{{.MethodName}}": {
|
|
API: "{{.API}}",
|
|
Method: "{{.Method}}",
|
|
Author: "{{.Author}}",
|
|
Describe: "{{.Describe}}",
|
|
},{{end}}
|
|
},
|
|
}
|
|
)
|
|
`
|
|
|
|
func GenerateRouterMap(srv *protogen.Service) (string, error) {
|
|
var generate = new(generateRouters)
|
|
generate.StructName = srv.GoName
|
|
generate.BaseURL = GetCommentBaseURL(srv.Comments)
|
|
generate.GenTo = GetCommentGenerateTo(srv.Comments)
|
|
|
|
for _, method := range srv.Methods {
|
|
generate.Methods = append(generate.Methods, generateRouterMethod{
|
|
MethodName: method.GoName,
|
|
InputName: method.Input.GoIdent.GoName,
|
|
OutputName: method.Output.GoIdent.GoName,
|
|
API: GetCommentApiURL(method),
|
|
Author: GetCommentAuthor(method.Comments),
|
|
Describe: GetCommentDescribe(method.Comments),
|
|
Method: GetCommentHttpMethod(method.Comments),
|
|
})
|
|
}
|
|
|
|
tpl, err := template.New("group_router").Parse(routerGenerateTpl)
|
|
if err != nil {
|
|
return "", fmt.Errorf("parse %s group router template failed: %v", srv.GoName, err)
|
|
}
|
|
|
|
tpl.DefinedTemplates()
|
|
var buf bytes.Buffer
|
|
if err = tpl.Execute(&buf, generate); err != nil {
|
|
return "", fmt.Errorf("execute %s group router template failed: %v", srv.GoName, err)
|
|
}
|
|
|
|
return buf.String(), nil
|
|
}
|