add CamelToSnake
This commit is contained in:
parent
8f99948004
commit
d3f8754cbf
2 changed files with 51 additions and 1 deletions
|
|
@ -366,7 +366,7 @@ func createModelTags(columnMetaData metadata.Column) []string {
|
||||||
var tags []string
|
var tags []string
|
||||||
switch modelJsonTag {
|
switch modelJsonTag {
|
||||||
case "snake-case":
|
case "snake-case":
|
||||||
tags = append(tags, fmt.Sprintf(`json:"%s"`, columnMetaData.Name))
|
tags = append(tags, fmt.Sprintf(`json:"%s"`, snaker.CamelToSnake(columnMetaData.Name)))
|
||||||
case "camel-case":
|
case "camel-case":
|
||||||
tags = append(tags, fmt.Sprintf(`json:"%s"`, snaker.SnakeToCamel(columnMetaData.Name, false)))
|
tags = append(tags, fmt.Sprintf(`json:"%s"`, snaker.SnakeToCamel(columnMetaData.Name, false)))
|
||||||
case "pascal-case":
|
case "pascal-case":
|
||||||
|
|
|
||||||
50
internal/3rdparty/snaker/snaker.go
vendored
50
internal/3rdparty/snaker/snaker.go
vendored
|
|
@ -8,6 +8,44 @@ import (
|
||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// CamelToSnake converts a given string to snake case
|
||||||
|
func CamelToSnake(s string) string {
|
||||||
|
var result string
|
||||||
|
var words []string
|
||||||
|
var lastPos int
|
||||||
|
rs := []rune(s)
|
||||||
|
|
||||||
|
for i := 0; i < len(rs); i++ {
|
||||||
|
if i > 0 && unicode.IsUpper(rs[i]) {
|
||||||
|
if initialism := startsWithInitialism(s[lastPos:]); initialism != "" {
|
||||||
|
words = append(words, initialism)
|
||||||
|
|
||||||
|
i += len(initialism) - 1
|
||||||
|
lastPos = i
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
words = append(words, s[lastPos:i])
|
||||||
|
lastPos = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// append the last word
|
||||||
|
if s[lastPos:] != "" {
|
||||||
|
words = append(words, s[lastPos:])
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, word := range words {
|
||||||
|
if k > 0 {
|
||||||
|
result += "_"
|
||||||
|
}
|
||||||
|
|
||||||
|
result += strings.ToLower(word)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// SnakeToCamel returns a string converted from snake case to uppercase
|
// SnakeToCamel returns a string converted from snake case to uppercase
|
||||||
func SnakeToCamel(s string, firstLetterUppercase ...bool) string {
|
func SnakeToCamel(s string, firstLetterUppercase ...bool) string {
|
||||||
upperCase := true
|
upperCase := true
|
||||||
|
|
@ -48,6 +86,18 @@ func snakeToCamel(s string, upperCase bool) string {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// startsWithInitialism returns the initialism if the given string begins with it
|
||||||
|
func startsWithInitialism(s string) string {
|
||||||
|
var initialism string
|
||||||
|
// the longest initialism is 5 char, the shortest 2
|
||||||
|
for i := 1; i <= 5; i++ {
|
||||||
|
if len(s) > i-1 && commonInitialisms[s[:i]] {
|
||||||
|
initialism = s[:i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return initialism
|
||||||
|
}
|
||||||
|
|
||||||
func toLowerFirstLetter(s string) string {
|
func toLowerFirstLetter(s string) string {
|
||||||
if s == "" {
|
if s == "" {
|
||||||
return s
|
return s
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue