59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"google.golang.org/protobuf/compiler/protogen"
|
|
"os"
|
|
)
|
|
|
|
type Coco struct{}
|
|
|
|
// Generate generate coco router map
|
|
func (c *Coco) Generate(plugin *protogen.Plugin) error {
|
|
if len(plugin.Files) == 0 {
|
|
return nil
|
|
}
|
|
for _, pbFile := range plugin.Files {
|
|
// service empty
|
|
if len(pbFile.Services) == 0 {
|
|
continue
|
|
}
|
|
|
|
// write file header
|
|
filename := fmt.Sprintf("autogen_router_%s.go", pbFile.GeneratedFilenamePrefix)
|
|
g := plugin.NewGeneratedFile(filename, pbFile.GoImportPath)
|
|
g.P("// Code generated by protoc-gen-coco. DO NOT EDIT.")
|
|
g.P()
|
|
g.P("package ", pbFile.GoPackageName)
|
|
g.P()
|
|
g.P(`import (
|
|
"gitter.top/coco/coco/core"
|
|
)`)
|
|
g.P()
|
|
|
|
for _, service := range pbFile.Services {
|
|
// service router group
|
|
if !IsCommentRouterGroup(pbFile.Services[0].Comments) {
|
|
continue
|
|
}
|
|
if len(service.Methods) == 0 {
|
|
continue
|
|
}
|
|
values, err := GenerateRouterMap(service)
|
|
if err != nil {
|
|
_, _ = fmt.Fprintf(os.Stderr, "generate router map failed: %v", err)
|
|
continue
|
|
}
|
|
g.P(values)
|
|
g.P()
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
var coco = new(Coco)
|
|
protogen.Options{}.Run(coco.Generate)
|
|
}
|