-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
61 lines (49 loc) · 1.29 KB
/
config.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
package weightediterator
import (
validation "github.com/go-ozzo/ozzo-validation"
"github.com/knadh/koanf/parsers/yaml"
"github.com/knadh/koanf/providers/file"
"github.com/knadh/koanf/providers/rawbytes"
"github.com/knadh/koanf/v2"
)
type IteratorConfig struct {
Weight int
Sequence []int
}
func (ic IteratorConfig) Validate() error {
return validation.ValidateStruct(&ic,
validation.Field(&ic.Weight, validation.Required, validation.Min(1)),
validation.Field(&ic.Sequence, validation.Required, validation.Length(1, 0)),
)
}
type Config struct {
Iterators []IteratorConfig `konaf:"iterators"`
}
func (c Config) Validate() error {
for _, item := range c.Iterators {
if err := item.Validate(); err != nil {
return err
}
}
return nil
}
func LoadFromFile(filePath string) (Config, error) {
return loadConfig(file.Provider(filePath))
}
func LoadFromBytes(rawConfig []byte) (Config, error) {
return loadConfig(rawbytes.Provider(rawConfig))
}
func loadConfig(provider koanf.Provider) (Config, error) {
var k = koanf.NewWithConf(koanf.Conf{
Delim: ".",
StrictMerge: true,
})
if err := k.Load(provider, yaml.Parser()); err != nil {
return Config{}, err
}
var config Config
if err := k.Unmarshal("", &config); err != nil {
return Config{}, err
}
return config, nil
}