protoc-gen-coco/main.go
2023-03-12 23:37:02 +08:00

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)
}