63 lines
1.4 KiB
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, "*_"))
|
|
}
|