mkdir.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package generator
  2. import (
  3. "path/filepath"
  4. "strings"
  5. "github.com/tal-tech/go-zero/tools/goctl/rpc/parser"
  6. "github.com/tal-tech/go-zero/tools/goctl/util"
  7. "github.com/tal-tech/go-zero/tools/goctl/util/ctx"
  8. "github.com/tal-tech/go-zero/tools/goctl/util/stringx"
  9. )
  10. const (
  11. wd = "wd"
  12. etc = "etc"
  13. internal = "internal"
  14. config = "config"
  15. logic = "logic"
  16. server = "server"
  17. svc = "svc"
  18. pb = "pb"
  19. call = "call"
  20. )
  21. type (
  22. DirContext interface {
  23. GetCall() Dir
  24. GetEtc() Dir
  25. GetInternal() Dir
  26. GetConfig() Dir
  27. GetLogic() Dir
  28. GetServer() Dir
  29. GetSvc() Dir
  30. GetPb() Dir
  31. GetMain() Dir
  32. }
  33. Dir struct {
  34. Base string
  35. Filename string
  36. Package string
  37. }
  38. defaultDirContext struct {
  39. inner map[string]Dir
  40. }
  41. )
  42. func mkdir(ctx *ctx.ProjectContext, proto parser.Proto) (DirContext, error) {
  43. inner := make(map[string]Dir)
  44. etcDir := filepath.Join(ctx.WorkDir, "etc")
  45. internalDir := filepath.Join(ctx.WorkDir, "internal")
  46. configDir := filepath.Join(internalDir, "config")
  47. logicDir := filepath.Join(internalDir, "logic")
  48. serverDir := filepath.Join(internalDir, "server")
  49. svcDir := filepath.Join(internalDir, "svc")
  50. pbDir := filepath.Join(internalDir, proto.GoPackage)
  51. callDir := filepath.Join(ctx.WorkDir, strings.ToLower(stringx.From(proto.Service.Name).ToCamel()))
  52. inner[wd] = Dir{
  53. Filename: ctx.WorkDir,
  54. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(ctx.WorkDir, ctx.Dir))),
  55. Base: filepath.Base(ctx.WorkDir),
  56. }
  57. inner[etc] = Dir{
  58. Filename: etcDir,
  59. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(etcDir, ctx.Dir))),
  60. Base: filepath.Base(etcDir),
  61. }
  62. inner[internal] = Dir{
  63. Filename: internalDir,
  64. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(internalDir, ctx.Dir))),
  65. Base: filepath.Base(internalDir),
  66. }
  67. inner[config] = Dir{
  68. Filename: configDir,
  69. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(configDir, ctx.Dir))),
  70. Base: filepath.Base(configDir),
  71. }
  72. inner[logic] = Dir{
  73. Filename: logicDir,
  74. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(logicDir, ctx.Dir))),
  75. Base: filepath.Base(logicDir),
  76. }
  77. inner[server] = Dir{
  78. Filename: serverDir,
  79. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(serverDir, ctx.Dir))),
  80. Base: filepath.Base(serverDir),
  81. }
  82. inner[svc] = Dir{
  83. Filename: svcDir,
  84. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(svcDir, ctx.Dir))),
  85. Base: filepath.Base(svcDir),
  86. }
  87. inner[pb] = Dir{
  88. Filename: pbDir,
  89. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(pbDir, ctx.Dir))),
  90. Base: filepath.Base(pbDir),
  91. }
  92. inner[call] = Dir{
  93. Filename: callDir,
  94. Package: filepath.ToSlash(filepath.Join(ctx.Path, strings.TrimPrefix(callDir, ctx.Dir))),
  95. Base: filepath.Base(callDir),
  96. }
  97. for _, v := range inner {
  98. err := util.MkdirIfNotExist(v.Filename)
  99. if err != nil {
  100. return nil, err
  101. }
  102. }
  103. return &defaultDirContext{
  104. inner: inner,
  105. }, nil
  106. }
  107. func (d *defaultDirContext) GetCall() Dir {
  108. return d.inner[call]
  109. }
  110. func (d *defaultDirContext) GetEtc() Dir {
  111. return d.inner[etc]
  112. }
  113. func (d *defaultDirContext) GetInternal() Dir {
  114. return d.inner[internal]
  115. }
  116. func (d *defaultDirContext) GetConfig() Dir {
  117. return d.inner[config]
  118. }
  119. func (d *defaultDirContext) GetLogic() Dir {
  120. return d.inner[logic]
  121. }
  122. func (d *defaultDirContext) GetServer() Dir {
  123. return d.inner[server]
  124. }
  125. func (d *defaultDirContext) GetSvc() Dir {
  126. return d.inner[svc]
  127. }
  128. func (d *defaultDirContext) GetPb() Dir {
  129. return d.inner[pb]
  130. }
  131. func (d *defaultDirContext) GetMain() Dir {
  132. return d.inner[wd]
  133. }
  134. func (d *Dir) Valid() bool {
  135. return len(d.Filename) > 0 && len(d.Package) > 0
  136. }