/
string_utils.go
70 lines (57 loc) · 1.34 KB
/
string_utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package utils
import (
"bytes"
"encoding/json"
"strings"
"unicode/utf8"
jsoniter "github.com/json-iterator/go"
)
func TruncateEnd(str string, length int, omission string) (string, int) {
r := []rune(str)
sLen := len(r)
if length >= sLen {
return str, sLen
}
return string(string(r[:length-utf8.RuneCountInString(omission)]) + omission), length
}
func ArrToString(str []string, maxLen int) (string, int) {
fullString := strings.Join(str[:], ",")
if maxLen == -1 {
return fullString, utf8.RuneCountInString(fullString)
}
return TruncateEnd(fullString, maxLen, "...")
}
func PrettyJSONString(str string) (string, error) {
var prettyJSON bytes.Buffer
if err := json.Indent(&prettyJSON, []byte(str), "", " "); err != nil {
return "", err
}
return prettyJSON.String(), nil
}
func PrettyStruct(data interface{}) (string, error) {
val, err := jsoniter.MarshalIndent(data, "", " ")
if err != nil {
return "", err
}
return string(val), nil
}
func SnakeToCamel(snakeStr string) (camelCase string) {
isToUpper := false
for k, v := range snakeStr {
if k == 0 {
camelCase = strings.ToUpper(string(snakeStr[0]))
} else {
if isToUpper {
camelCase += strings.ToUpper(string(v))
isToUpper = false
} else {
if v == '_' {
isToUpper = true
} else {
camelCase += string(v)
}
}
}
}
return
}