Files

30 lines
579 B
Go

package config
import (
"fmt"
"os"
"gopkg.in/yaml.v3"
)
func LoadFile(path string) (Config, error) {
file, err := os.Open(path)
if err != nil {
return Config{}, fmt.Errorf("load config %q: %w", path, err)
}
defer file.Close()
var cfg Config
decoder := yaml.NewDecoder(file)
decoder.KnownFields(true)
if err := decoder.Decode(&cfg); err != nil {
return Config{}, fmt.Errorf("parse config %q: %w", path, err)
}
ApplyDefaults(&cfg)
if err := Validate(cfg); err != nil {
return Config{}, fmt.Errorf("validate config %q: %w", path, err)
}
return cfg, nil
}