gendata.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package dartgen
  2. import (
  3. "os"
  4. "text/template"
  5. "zero/core/logx"
  6. "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. convertMemberType(api)
  56. return t.Execute(file, api)
  57. }
  58. func genTokens(dir string) error {
  59. path := dir + "tokens.dart"
  60. if fileExists(path) {
  61. return nil
  62. }
  63. tokensFile, e := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
  64. if e != nil {
  65. logx.Error(e)
  66. return e
  67. }
  68. defer tokensFile.Close()
  69. tokensFile.WriteString(tokensFileContent)
  70. return nil
  71. }