-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse.go
92 lines (80 loc) · 1.88 KB
/
parse.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
package sys
import (
"io/ioutil"
"path/filepath"
"strconv"
"strings"
"github.com/mmcloughlin/goperf/pkg/cfg"
)
type fileproperty struct {
filename string
alias string
parser func(string) (cfg.Value, error)
doc string
tags []cfg.Tag
}
func property(filename string, parser func(string) (cfg.Value, error), doc string, tags ...cfg.Tag) fileproperty {
return fileproperty{
filename: filename,
parser: parser,
doc: doc,
tags: tags,
}
}
func perfproperty(filename string, parser func(string) (cfg.Value, error), doc string) fileproperty {
return property(filename, parser, doc, cfg.TagPerfCritical)
}
func (p fileproperty) key() cfg.Key {
if p.alias != "" {
return cfg.Key(p.alias)
}
return cfg.Key(strings.ReplaceAll(p.filename, "_", ""))
}
func (p fileproperty) parse(s string) (cfg.Entry, error) {
v, err := p.parser(s)
if err != nil {
return nil, err
}
return cfg.Property(p.key(), p.doc, v, p.tags...), nil
}
func parsefiles(root string, properties []fileproperty) (cfg.Configuration, error) {
c := cfg.Configuration{}
for _, p := range properties {
filename := filepath.Join(root, p.filename)
b, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
data := strings.TrimSpace(string(b))
prop, err := p.parse(data)
if err != nil {
return nil, err
}
c = append(c, prop)
}
return c, nil
}
func parseint(s string) (cfg.Value, error) {
n, err := strconv.Atoi(s)
if err != nil {
return nil, err
}
return cfg.IntValue(n), nil
}
func parsekhz(s string) (cfg.Value, error) {
n, err := strconv.Atoi(s)
if err != nil {
return nil, err
}
return cfg.FrequencyValue(n * 1000), nil
}
func parsebool(s string) (cfg.Value, error) {
b, err := strconv.ParseBool(s)
if err != nil {
return nil, err
}
return cfg.BoolValue(b), nil
}
func parsestring(s string) (cfg.Value, error) {
return cfg.StringValue(s), nil
}