funcs.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package ktgen
  2. import (
  3. "log"
  4. "strings"
  5. "text/template"
  6. "github.com/tal-tech/go-zero/tools/goctl/api/util"
  7. )
  8. var funcsMap = template.FuncMap{
  9. "lowCamelCase": lowCamelCase,
  10. "pathToFuncName": pathToFuncName,
  11. "parseType": parseType,
  12. "add": add,
  13. "upperCase": upperCase,
  14. }
  15. func lowCamelCase(s string) string {
  16. if len(s) < 1 {
  17. return ""
  18. }
  19. s = util.ToCamelCase(util.ToSnakeCase(s))
  20. return util.ToLower(s[:1]) + s[1:]
  21. }
  22. func pathToFuncName(path string) string {
  23. if !strings.HasPrefix(path, "/") {
  24. path = "/" + path
  25. }
  26. path = strings.ReplaceAll(path, "/", "_")
  27. path = strings.ReplaceAll(path, "-", "_")
  28. camel := util.ToCamelCase(path)
  29. return util.ToLower(camel[:1]) + camel[1:]
  30. }
  31. func parseType(t string) string {
  32. t = strings.Replace(t, "*", "", -1)
  33. if strings.HasPrefix(t, "[]") {
  34. return "List<" + parseType(t[2:]) + ">"
  35. }
  36. if strings.HasPrefix(t, "map") {
  37. tys, e := util.DecomposeType(t)
  38. if e != nil {
  39. log.Fatal(e)
  40. }
  41. if len(tys) != 2 {
  42. log.Fatal("Map type number !=2")
  43. }
  44. return "Map<String," + parseType(tys[1]) + ">"
  45. }
  46. switch t {
  47. case "string":
  48. return "String"
  49. case "int", "int32", "int64":
  50. return "Int"
  51. case "float", "float32", "float64":
  52. return "Double"
  53. case "bool":
  54. return "Boolean"
  55. default:
  56. return t
  57. }
  58. }
  59. func add(a, i int) int {
  60. return a + i
  61. }
  62. func upperCase(s string) string {
  63. return strings.ToUpper(s)
  64. }