/
item.go
56 lines (48 loc) · 1.09 KB
/
item.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
package kmstool
type KMSItem struct {
c string
m map[string]string
}
func NewKMSItem(content string) *KMSItem {
return &KMSItem{
c: content,
}
}
func (s *KMSItem) Content() string {
return s.c
}
func (s *KMSItem) Parse(parser func(content string) (parseMap map[string]string, err error)) error {
parsed, err := parser(s.c)
if err != nil {
return err
}
s.m = parsed
return nil
}
func (s *KMSItem) RunOnParsed(command func(parsedHit string, parsedContent string) (content string, err error)) error {
newParsed := make(map[string]string, len(s.m))
for hit, content := range s.m {
parsed, err := command(hit, content)
if err != nil {
return err
}
newParsed[hit] = parsed
}
s.m = newParsed
return nil
}
func (s *KMSItem) Replace(replacer func(content string, parsedHit string, parsedContent string) (newContent string, err error)) error {
var content string
var err error
var newContent string
content = s.c
for hit, key := range s.m {
newContent, err = replacer(content, hit, key)
if err != nil {
return err
}
content = newContent
}
s.c = content
return nil
}