123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package generator
- import (
- "path/filepath"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/rpc/parser"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/console"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/ctx"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/pathx"
- )
- type ZRpcContext struct {
- // Sre is the source file of the proto.
- Src string
- // ProtoCmd is the command to generate proto files.
- ProtocCmd string
- // ProtoGenGrpcDir is the directory to store the generated proto files.
- ProtoGenGrpcDir string
- // ProtoGenGoDir is the directory to store the generated go files.
- ProtoGenGoDir string
- // IsGooglePlugin is the flag to indicate whether the proto file is generated by google plugin.
- IsGooglePlugin bool
- // GoOutput is the output directory of the generated go files.
- GoOutput string
- // GrpcOutput is the output directory of the generated grpc files.
- GrpcOutput string
- // Output is the output directory of the generated files.
- Output string
- // Multiple is the flag to indicate whether the proto file is generated in multiple mode.
- Multiple bool
- // Whether to generate rpc client
- IsGenClient bool
- }
- // Generate generates a rpc service, through the proto file,
- // code storage directory, and proto import parameters to control
- // the source file and target location of the rpc service that needs to be generated
- func (g *Generator) Generate(zctx *ZRpcContext) error {
- abs, err := filepath.Abs(zctx.Output)
- if err != nil {
- return err
- }
- err = pathx.MkdirIfNotExist(abs)
- if err != nil {
- return err
- }
- err = g.Prepare()
- if err != nil {
- return err
- }
- projectCtx, err := ctx.Prepare(abs)
- if err != nil {
- return err
- }
- p := parser.NewDefaultProtoParser()
- proto, err := p.Parse(zctx.Src, zctx.Multiple)
- if err != nil {
- return err
- }
- dirCtx, err := mkdir(projectCtx, proto, g.cfg, zctx)
- if err != nil {
- return err
- }
- err = g.GenEtc(dirCtx, proto, g.cfg)
- if err != nil {
- return err
- }
- err = g.GenPb(dirCtx, zctx)
- if err != nil {
- return err
- }
- err = g.GenConfig(dirCtx, proto, g.cfg)
- if err != nil {
- return err
- }
- err = g.GenSvc(dirCtx, proto, g.cfg)
- if err != nil {
- return err
- }
- err = g.GenLogic(dirCtx, proto, g.cfg, zctx)
- if err != nil {
- return err
- }
- err = g.GenServer(dirCtx, proto, g.cfg, zctx)
- if err != nil {
- return err
- }
- err = g.GenMain(dirCtx, proto, g.cfg, zctx)
- if err != nil {
- return err
- }
- if zctx.IsGenClient {
- err = g.GenCall(dirCtx, proto, g.cfg, zctx)
- }
- console.NewColorConsole().MarkDone()
- return err
- }
|