51 Zeilen
1.1 KiB
Go
51 Zeilen
1.1 KiB
Go
package yamlsettings
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
// LoadFiles marshals your app settings from the default.yml overridden
|
|
// by the settings.yml file.
|
|
func LoadFiles(defaultsFile, settingsFile string, v interface{}) error {
|
|
// Read the defaults file.
|
|
if err := LoadFile(defaultsFile, v); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Read the settings.yml. It's OK if it doesn't exist.
|
|
if err := LoadFile(settingsFile, v); err != nil && !os.IsNotExist(err) {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadFile opens and marshals YAML settings from a single config file.
|
|
func LoadFile(filename string, v interface{}) error {
|
|
fh, err := os.Open(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
dec := yaml.NewDecoder(fh)
|
|
return dec.Decode(v)
|
|
}
|
|
|
|
// LoadReaders marshals your app settings from the defaults and settings
|
|
// readers, so you can feed in YAML data from sources other than files
|
|
// on disk.
|
|
func LoadReaders(defaults, settings io.Reader, v interface{}) error {
|
|
if defaults != nil {
|
|
if err := yaml.NewDecoder(defaults).Decode(v); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if settings != nil {
|
|
return yaml.NewDecoder(settings).Decode(v)
|
|
}
|
|
return nil
|
|
}
|