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 }