-
Notifications
You must be signed in to change notification settings - Fork 0
/
string.go
139 lines (112 loc) · 2.56 KB
/
string.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package parser
import (
"errors"
"math"
"strconv"
"strings"
)
type String string
// ToInt cast String to int
func (s String) ToInt() (int, error) {
return strconv.Atoi(string(s))
}
// MustToInt cast String to int with panic on error instead
func (s String) MustToInt() int {
i, err := s.ToInt()
if err != nil {
panic(err)
}
return i
}
func (s String) ToStringPtr() *string {
return toStringPtr(string(s))
}
// ToBool cast String to represented bool
func (s String) ToBool() (bool, error) {
switch string(s) {
case "true":
fallthrough
case "True":
fallthrough
case "TRUE":
fallthrough
case "1":
return true, nil
case "false":
fallthrough
case "False":
fallthrough
case "FALSE":
fallthrough
case "0":
return false, nil
default:
return false, errors.New("string cannot be converted to bool")
}
}
// MustToBool cast String to bool with panic on error instead
func (s String) MustToBool() bool {
b, err := s.ToBool()
if err != nil {
panic(err)
}
return b
}
// ToStringArr cast String to array of string
func (s String) ToStringArr(separator ...string) ([]string, error) {
if s == "" {
return []string{}, nil
}
sep := ","
if len(separator) > 0 {
sep = separator[0]
}
var ss []string
for _, v := range strings.Split(string(s), sep) {
ss = append(ss, strings.TrimSpace(v))
}
return ss, nil
}
// ToIntArr cast String to array of int
func (s String) ToIntArr(separator ...string) ([]int, error) {
if s == "" {
return []int{}, nil
}
sep := ","
if len(separator) > 0 {
sep = separator[0]
}
var is []int
for _, v := range strings.Split(string(s), sep) {
i, e := strconv.Atoi(strings.TrimSpace(v))
if e != nil {
return nil, e
}
is = append(is, i)
}
return is, nil
}
// MaskRight mask string with a char(rune) and left n value on the right side
// Example: String("NOT_MASKED:MASKED").MaskRight(11, '*') returns NOT_MASKED:******
func (s String) MaskRight(NLeft int, char rune) string {
rs := []rune(s)
n := len(s)
// Bound NLeft to max length of text
maxNLeft := int(math.Max(math.Min(float64(n), float64(NLeft)), 0))
for i := 0; i < n-maxNLeft; i++ {
rs[n-i-1] = char
}
return string(rs)
}
// MaskLeft mask string with a char(rune) and left n value on the left side
// Example: String("MASKED:NOT_MASKED").MaskLeft(11, '*') returns ******:NOT_MASKED
func (s String) MaskLeft(NLeft int, char rune) string {
rs := []rune(s)
n := len(s)
// Bound NLeft to max length of text
maxNLeft := int(math.Max(math.Min(float64(n), float64(NLeft)), 0))
for i := 0; i < n-maxNLeft; i++ {
rs[i] = char
}
return string(rs)
}