/
enum.tmpl.go
91 lines (77 loc) · 1.64 KB
/
enum.tmpl.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
package enum
const tmp = `// Code generated by github.com/ericyaoxr/mcube
// DO NOT EDIT
package {{.PKG}}
import (
"bytes"
"fmt"
"strings"
)
{{- range .Enums.Items }}
{{ if $.ValueMap }}
var (
// {{.Name}}_name name map
{{.Name}}_name = map[{{.Name}}]string{
{{- range .Items }}
{{.Name}}: "{{.Show}}",
{{- end}}
}
// {{.Name}}_value value map
{{.Name}}_value = map[string]{{.Name}}{
{{- range .Items }}
"{{.Show}}": {{.Name}},
{{- end}}
}
)
{{end}}
// Parse{{.Name}}FromString Parse {{.Name}} from string
func Parse{{.Name}}FromString(str string) ({{.Name}}, error) {
key := strings.Trim(string(str), {{$.Backquote}}"{{$.Backquote}})
v, ok := {{.Name}}_value[strings.ToUpper(key)]
if !ok {
return 0, fmt.Errorf("unknown {{.Name}}: %s", str)
}
return {{.Name}}(v), nil
}
// Equal type compare
func (t {{.Name}}) Equal(target {{.Name}}) bool {
return t == target
}
// IsIn todo
func (t {{.Name}}) IsIn(targets ...{{.Name}}) bool {
for _, target := range targets {
if t.Equal(target) {
return true
}
}
return false
}
{{ if $.Stringer }}
// String stringer
func (t {{.Name}}) String() string {
v, ok := {{.Name}}_name[t]
if !ok {
return "unknown"
}
return v
}
{{end}}
{{ if $.Marshal }}
// MarshalJSON todo
func (t {{.Name}}) MarshalJSON() ([]byte, error) {
b := bytes.NewBufferString({{$.Backquote}}"{{$.Backquote}})
b.WriteString(strings.ToUpper(t.String()))
b.WriteString({{$.Backquote}}"{{$.Backquote}})
return b.Bytes(), nil
}
// UnmarshalJSON todo
func (t *{{.Name}}) UnmarshalJSON(b []byte) error {
ins, err := Parse{{.Name}}FromString(string(b))
if err != nil {
return err
}
*t = ins
return nil
}
{{end}}
{{- end}}`