gendata.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package dartgen
  2. import (
  3. "os"
  4. "text/template"
  5. "github.com/tal-tech/go-zero/core/logx"
  6. "github.com/tal-tech/go-zero/tools/goctl/api/spec"
  7. )
  8. const dataTemplate = `// --{{with .Info}}{{.Title}}{{end}}--
  9. {{ range .Types}}
  10. class {{.Name}}{
  11. {{range .Members}}
  12. /// {{.Comment}}
  13. final {{.Type}} {{lowCamelCase .Name}};
  14. {{end}}
  15. {{.Name}}({ {{range .Members}}
  16. this.{{lowCamelCase .Name}},{{end}}
  17. });
  18. factory {{.Name}}.fromJson(Map<String,dynamic> m) {
  19. return {{.Name}}({{range .Members}}
  20. {{lowCamelCase .Name}}: {{if isDirectType .Type}}m['{{tagGet .Tag "json"}}']{{else if isClassListType .Type}}(m['{{tagGet .Tag "json"}}'] as List<dynamic>).map((i) => {{getCoreType .Type}}.fromJson(i)){{else}}{{.Type}}.fromJson(m['{{tagGet .Tag "json"}}']){{end}},{{end}}
  21. );
  22. }
  23. Map<String,dynamic> toJson() {
  24. return { {{range .Members}}
  25. '{{tagGet .Tag "json"}}': {{if isDirectType .Type}}{{lowCamelCase .Name}}{{else if isClassListType .Type}}{{lowCamelCase .Name}}.map((i) => i.toJson()){{else}}{{lowCamelCase .Name}}.toJson(){{end}},{{end}}
  26. };
  27. }
  28. }
  29. {{end}}
  30. `
  31. func genData(dir string, api *spec.ApiSpec) error {
  32. e := os.MkdirAll(dir, 0755)
  33. if e != nil {
  34. logx.Error(e)
  35. return e
  36. }
  37. e = genTokens(dir)
  38. if e != nil {
  39. logx.Error(e)
  40. return e
  41. }
  42. file, e := os.OpenFile(dir+api.Info.Title+".dart", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
  43. if e != nil {
  44. logx.Error(e)
  45. return e
  46. }
  47. defer file.Close()
  48. t := template.New("dataTemplate")
  49. t = t.Funcs(funcMap)
  50. t, e = t.Parse(dataTemplate)
  51. if e != nil {
  52. logx.Error(e)
  53. return e
  54. }
  55. return t.Execute(file, api)
  56. }
  57. func genTokens(dir string) error {
  58. path := dir + "tokens.dart"
  59. if fileExists(path) {
  60. return nil
  61. }
  62. tokensFile, e := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
  63. if e != nil {
  64. logx.Error(e)
  65. return e
  66. }
  67. defer tokensFile.Close()
  68. tokensFile.WriteString(tokensFileContent)
  69. return nil
  70. }