1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package generator
- import (
- "path/filepath"
- "github.com/zeromicro/go-zero/tools/goctl/rpc/parser"
- "github.com/zeromicro/go-zero/tools/goctl/util/console"
- "github.com/zeromicro/go-zero/tools/goctl/util/ctx"
- "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
- )
- type ZRpcContext struct {
- Src string
- ProtocCmd string
- ProtoGenGrpcDir string
- ProtoGenGoDir string
- IsGooglePlugin bool
- GoOutput string
- GrpcOutput string
- Output string
- }
- // Generate generates an 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)
- 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)
- if err != nil {
- return err
- }
- err = g.GenServer(dirCtx, proto, g.cfg)
- if err != nil {
- return err
- }
- err = g.GenMain(dirCtx, proto, g.cfg)
- if err != nil {
- return err
- }
- err = g.GenCall(dirCtx, proto, g.cfg)
- console.NewColorConsole().MarkDone()
- return err
- }
|