-
Notifications
You must be signed in to change notification settings - Fork 0
/
state_methods.go
executable file
·132 lines (111 loc) · 2.69 KB
/
state_methods.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
// 当前文件由 cmd/enums 生成,请勿手动编辑!
package admin
import (
"fmt"
"github.com/issue9/web"
"github.com/issue9/cmfx/locales"
)
var state2StringMap = map[State]string{
StateNormal: "normal",
StateLocked: "locked",
StateLeft: "left",
}
var string2StateMap = map[string]State{
"normal": StateNormal,
"locked": StateLocked,
"left": StateLeft,
}
// String fmt.Stringer
func (s State) String() string {
if v, found := state2StringMap[s]; found {
return v
}
return fmt.Sprintf("State(%d)", s)
}
// MarshalText encoding.TextMarshaler
func (s State) MarshalText() ([]byte, error) {
if v, found := state2StringMap[s]; found {
return []byte(v), nil
}
return []byte(fmt.Sprintf("State(%d)", s)), fmt.Errorf("未找到 %d 对应的字符串值", s)
}
// ParseState 将字符串 v 解析为 State 类型
func ParseState(v string) (State, error) {
if t, found := string2StateMap[v]; found {
return t, nil
}
return 0, fmt.Errorf("未找到 %s 对应的值", v)
}
// UnmarshalText encoding.TextUnmarshaler
func (s *State) UnmarshalText(p []byte) error {
tmp, err := ParseState(string(p))
if err == nil {
*s = tmp
}
return err
}
// IsValid 验证该状态值是否有效
func (s State) IsValid() bool {
_, found := state2StringMap[s]
return found
}
func StateValidator(v any) bool {
vv, ok := v.(State)
if !ok {
return false
}
return vv.IsValid()
}
var StateRule = web.NewRuleFunc(locales.InvalidValue, StateValidator)
var sex2StringMap = map[Sex]string{
SexUnknown: "unknown",
SexMale: "male",
SexFemale: "female",
}
var string2SexMap = map[string]Sex{
"unknown": SexUnknown,
"male": SexMale,
"female": SexFemale,
}
// String fmt.Stringer
func (s Sex) String() string {
if v, found := sex2StringMap[s]; found {
return v
}
return fmt.Sprintf("Sex(%d)", s)
}
// MarshalText encoding.TextMarshaler
func (s Sex) MarshalText() ([]byte, error) {
if v, found := sex2StringMap[s]; found {
return []byte(v), nil
}
return []byte(fmt.Sprintf("Sex(%d)", s)), fmt.Errorf("未找到 %d 对应的字符串值", s)
}
// ParseSex 将字符串 v 解析为 State 类型
func ParseSex(v string) (Sex, error) {
if t, found := string2SexMap[v]; found {
return t, nil
}
return 0, fmt.Errorf("未找到 %s 对应的值", v)
}
// UnmarshalText encoding.TextUnmarshaler
func (s *Sex) UnmarshalText(p []byte) error {
tmp, err := ParseSex(string(p))
if err == nil {
*s = tmp
}
return err
}
// IsValid 验证该状态值是否有效
func (s Sex) IsValid() bool {
_, found := sex2StringMap[s]
return found
}
func SexValidator(v any) bool {
vv, ok := v.(Sex)
if !ok {
return false
}
return vv.IsValid()
}
var SexRule = web.NewRuleFunc(locales.InvalidValue, SexValidator)