/
apis.go
97 lines (80 loc) · 1.81 KB
/
apis.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
93
94
95
96
97
package goconf
import (
"strconv"
"strings"
)
// Do not use this directly.
var initialized Root
type TypeConversionFunc func(string) (interface{}, error)
var (
IntConversion TypeConversionFunc = func(s string) (interface{}, error) {
v, err := strconv.ParseFloat(s, 64)
if err != nil {
return nil, err
}
return int(v), nil
}
FloatConversion TypeConversionFunc = func(s string) (interface{}, error) {
v, err := strconv.ParseFloat(s, 64)
if err != nil {
return nil, err
}
return v, nil
}
BooleanConversion TypeConversionFunc = func(s string) (interface{}, error) {
v, err := strconv.ParseFloat(s, 64)
if err != nil {
return strings.ToLower(s) == "true", nil
}
return v > 0, nil
}
)
func Init(fn func(Builder)) {
builder := NewBuilder()
fn(builder)
initialized = builder.BuildRoot()
err := initialized.Reload()
if err != nil {
panic(err)
}
}
func panicIfNotInitialized() {
if initialized == nil {
panic("configuration is not initialized")
}
}
func CastOrDefault(name string, defaultValue interface{}, fn TypeConversionFunc) interface{} {
if v, ok := Cast(name, fn); ok {
return v
} else {
return defaultValue
}
}
func Cast(name string, fn TypeConversionFunc) (interface{}, bool) {
if v, ok := GetString(name); ok {
if value, err := fn(v); err == nil {
return value, true
}
}
return nil, false
}
func GetString(name string) (string, bool) {
panicIfNotInitialized()
return initialized.GetString(name)
}
func GetStringOrDefault(name string, defaultValue string) string {
panicIfNotInitialized()
if value, ok := initialized.GetString(name); ok {
return value
} else {
return defaultValue
}
}
func GetSection(name string) Section {
panicIfNotInitialized()
return initialized.GetSection(name)
}
func ConfigRoot() Root {
panicIfNotInitialized()
return initialized
}