-
Notifications
You must be signed in to change notification settings - Fork 3
/
tag.go
65 lines (56 loc) · 1.13 KB
/
tag.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
package velty
import (
"strings"
)
const (
nameSeparator = "|"
velty = "velty"
)
//Tag represent field tag
type Tag struct {
Names []string
Prefix string
Omit bool
}
//Parse parses tag
func Parse(tagString string) *Tag {
tag := &Tag{}
tag.Names = make([]string, 0)
elements := strings.Split(tagString, ",")
if len(elements) == 0 {
return tag
}
for i, element := range elements {
nv := strings.Split(element, "=")
if len(nv) == 2 {
switch strings.ToLower(strings.TrimSpace(nv[0])) {
case "names":
tag.Names = strings.Split(strings.TrimSpace(nv[1]), nameSeparator)
case "name":
tag.Names = []string{strings.TrimSpace(nv[1])}
case "prefix":
tag.Prefix = strings.TrimSpace(nv[1])
}
continue
}
if len(nv) == 1 && strings.TrimSpace(nv[0]) == "-" {
tag.Omit = true
continue
}
if i == 0 {
columnName := strings.TrimSpace(element)
if len(columnName) > 0 {
tag.Names = strings.Split(columnName, nameSeparator)
}
}
}
return tag
}
func (t *Tag) nameEqual(value string) bool {
for _, name := range t.Names {
if name == value {
return true
}
}
return false
}