// Copyright (c) 2017, A. Stoewer // All rights reserved. package strcase import ( "strings" ) // UpperCamelCase converts a string into camel case starting with a upper case letter. func UpperCamelCase(s string) string { return camelCase(s, true) } // LowerCamelCase converts a string into camel case starting with a lower case letter. func LowerCamelCase(s string) string { return camelCase(s, false) } func camelCase(s string, upper bool) string { s = strings.TrimSpace(s) buffer := make([]rune, 0, len(s)) stringIter(s, func(prev, curr, next rune) { if !isDelimiter(curr) { if isDelimiter(prev) || (upper && prev == 0) { buffer = append(buffer, toUpper(curr)) } else if isLower(prev) { buffer = append(buffer, curr) } else if isUpper(prev) && isUpper(curr) && isLower(next) { // Assume a case like "R" for "XRequestId" buffer = append(buffer, curr) } else { buffer = append(buffer, toLower(curr)) } } }) return string(buffer) }