github.com/Desuuuu/genqlient@v0.5.3/generate/util.go (about) 1 package generate 2 3 import ( 4 "strings" 5 "unicode" 6 "unicode/utf8" 7 ) 8 9 func reverse(slice []string) { 10 for left, right := 0, len(slice)-1; left < right; left, right = left+1, right-1 { 11 slice[left], slice[right] = slice[right], slice[left] 12 } 13 } 14 15 func changeFirst(s string, f func(rune) rune) string { 16 c, n := utf8.DecodeRuneInString(s) 17 if c == utf8.RuneError { // empty or invalid 18 return s 19 } 20 return string(f(c)) + s[n:] 21 } 22 23 func lowerFirst(s string) string { 24 return changeFirst(strings.TrimLeft(s, "_"), unicode.ToLower) 25 } 26 27 func upperFirst(s string) string { 28 return changeFirst(strings.TrimLeft(s, "_"), unicode.ToUpper) 29 } 30 31 func goConstName(s string) string { 32 if strings.TrimLeft(s, "_") == "" { 33 return s 34 } 35 var prev rune 36 return strings.Map(func(r rune) rune { 37 var ret rune 38 if r == '_' { 39 ret = -1 40 } else if prev == '_' || prev == 0 { 41 ret = unicode.ToUpper(r) 42 } else { 43 ret = unicode.ToLower(r) 44 } 45 prev = r 46 return ret 47 }, s) 48 }