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