/
settings.go
53 lines (43 loc) · 1.15 KB
/
settings.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
package config
import "slices"
type Option struct{ ID, Name string }
type Setting struct {
Checkbox bool
Default, ID, Name string
Options []*Option
}
var Settings map[string][]*Setting
func init() {
unmarshal("settings.toml", &Settings)
for _, settings := range Settings {
for _, setting := range settings {
if len(setting.Options) == 0 {
continue
}
// Default to the first option.
if setting.Default == "" {
setting.Default = setting.Options[0].ID
}
// A bit hacky, append all something options onto "All Something".
switch setting.Options[0].Name {
case "All Holes":
for _, hole := range HoleList {
setting.Options = append(setting.Options,
&Option{ID: hole.ID, Name: hole.Name})
}
case "All Languages":
for _, lang := range LangList {
setting.Options = append(setting.Options,
&Option{ID: lang.ID, Name: lang.Name})
}
}
}
}
}
func (s *Setting) ValueOrDefault(value string) string {
// TODO Consider something more effecient like a hash?
if slices.ContainsFunc(s.Options, func(o *Option) bool { return o.ID == value }) {
return value
}
return s.Default
}