55 lines
896 B
Go
55 lines
896 B
Go
package config
|
|
|
|
import (
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type ConfigurationFile struct {
|
|
vp *viper.Viper
|
|
}
|
|
|
|
var (
|
|
sections = make(map[string]interface{})
|
|
)
|
|
|
|
func NewConfigurationFile() (*ConfigurationFile, error) {
|
|
vp := viper.New()
|
|
vp.SetConfigType("yaml")
|
|
vp.SetConfigName("settings")
|
|
vp.AddConfigPath(".")
|
|
err := vp.ReadInConfig()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
s := &ConfigurationFile{vp}
|
|
vp.SetConfigName("settings.local")
|
|
err = vp.MergeInConfig()
|
|
if err != nil {
|
|
return s, nil
|
|
}
|
|
return s, nil
|
|
}
|
|
|
|
func (s *ConfigurationFile) ReadSection(k string, v interface{}) error {
|
|
err := s.vp.UnmarshalKey(k, v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, ok := sections[k]; !ok {
|
|
sections[k] = v
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *ConfigurationFile) ReloadAllSection() error {
|
|
for k, v := range sections {
|
|
err := s.ReadSection(k, v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|