nswrap/util/util.go

63 lines
1.4 KiB
Go

package util
import (
"strconv"
"strings"
)
// InStrings returns true if item exists in items. It must be an exact string
// match.
func InStrings(item string, items []string) bool {
for _, v := range items {
if item == v {
return true
}
}
return false
}
// Ucfirst returns the word with the first letter uppercased; none of the other
// letters in the word are modified. For example "fooBar" would return "FooBar".
func Ucfirst(word string) string {
if word == "" {
return ""
}
if len(word) == 1 {
return strings.ToUpper(word)
}
return strings.ToUpper(string(word[0])) + word[1:]
}
// Atoi converts a string to an integer in cases where we are sure that s will
// be a valid integer, otherwise it will panic.
func Atoi(s string) int {
i, err := strconv.Atoi(s)
PanicOnError(err, "bad integer")
return i
}
// GetExportedName returns a deterministic and Go safe name for a C type. For
// example, "*__foo[]" will return "FooSlice".
func GetExportedName(field string) string {
if strings.Contains(field, "interface{}") ||
strings.Contains(field, "Interface{}") {
return "Interface"
}
// Convert "[]byte" into "byteSlice". This also works with multiple slices,
// like "[][]byte" to "byteSliceSlice".
for len(field) > 2 && field[:2] == "[]" {
field = field[2:] + "Slice"
}
// NotFunc(int)()
field = strings.Replace(field, "(", "_", -1)
field = strings.Replace(field, ")", "_", -1)
return Ucfirst(strings.TrimLeft(field, "*_"))
}