12345678910111213141516171819202122232425262728293031323334 |
- package generator
- import (
- "bytes"
- "path/filepath"
- "strings"
- conf "github.com/tal-tech/go-zero/tools/goctl/config"
- "github.com/tal-tech/go-zero/tools/goctl/rpc/execx"
- "github.com/tal-tech/go-zero/tools/goctl/rpc/parser"
- )
- // GenPb generates the pb.go file, which is a layer of packaging for protoc to generate gprc,
- // but the commands and flags in protoc are not completely joined in goctl. At present, proto_path(-I) is introduced
- func (g *DefaultGenerator) GenPb(ctx DirContext, protoImportPath []string, proto parser.Proto, _ *conf.Config) error {
- dir := ctx.GetPb()
- cw := new(bytes.Buffer)
- base := filepath.Dir(proto.Src)
- cw.WriteString("protoc ")
- for _, ip := range protoImportPath {
- cw.WriteString(" -I=" + ip)
- }
- cw.WriteString(" -I=" + base)
- cw.WriteString(" " + proto.Name)
- if strings.Contains(proto.GoPackage, "/") {
- cw.WriteString(" --go_out=plugins=grpc:" + ctx.GetMain().Filename)
- } else {
- cw.WriteString(" --go_out=plugins=grpc:" + dir.Filename)
- }
- command := cw.String()
- g.log.Debug(command)
- _, err := execx.Run(command, "")
- return err
- }
|