38 lines
749 B
Go
38 lines
749 B
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
"unicode"
|
|
)
|
|
|
|
func Camelize(s string) string {
|
|
// If input has no delimiters, assume it's already in camelCase or PascalCase
|
|
if !strings.ContainsAny(s, "_- ") {
|
|
return s[:1] + s[1:] // No change (optionally lowercase first letter: strings.ToLower(s[:1]) + s[1:])
|
|
}
|
|
|
|
// Otherwise, split and camelCase it
|
|
parts := strings.FieldsFunc(s, func(r rune) bool {
|
|
return r == '_' || r == '-' || unicode.IsSpace(r)
|
|
})
|
|
|
|
if len(parts) == 0 {
|
|
return ""
|
|
}
|
|
|
|
var b strings.Builder
|
|
b.WriteString(strings.ToLower(parts[0]))
|
|
|
|
for _, part := range parts[1:] {
|
|
if len(part) == 0 {
|
|
continue
|
|
}
|
|
b.WriteString(strings.ToUpper(part[:1]))
|
|
if len(part) > 1 {
|
|
b.WriteString(part[1:])
|
|
}
|
|
}
|
|
|
|
return b.String()
|
|
}
|