39
rpc.go
Normal file
39
rpc.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"google.golang.org/protobuf/compiler/protogen"
|
||||
)
|
||||
|
||||
func (g *Generator) rpcGenerate(component string, plugin *protogen.Plugin) error {
|
||||
for _, file := range plugin.Files {
|
||||
|
||||
if !file.Generate {
|
||||
continue
|
||||
}
|
||||
|
||||
// 1. Initialise a buffer to hold the generated code
|
||||
var buf bytes.Buffer
|
||||
|
||||
// 2. Write the package name
|
||||
pkg := fmt.Sprintf("package %s", file.GoPackageName)
|
||||
buf.Write([]byte(pkg))
|
||||
|
||||
// 3. For each message add our Foo() method
|
||||
for _, msg := range file.Proto.MessageType {
|
||||
buf.Write([]byte(fmt.Sprintf(`func (x %s) Foo() string {
|
||||
return "bar"}`, *msg.Name)))
|
||||
}
|
||||
|
||||
// 4. Specify the output filename, in this case test.foo.go
|
||||
filename := file.GeneratedFilenamePrefix + ".foo.go"
|
||||
file := plugin.NewGeneratedFile(filename, ".")
|
||||
|
||||
// 5. Pass the data from our buffer to the plugin file struct
|
||||
file.Write(buf.Bytes())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user