funcs.go 1.4 KB

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