package config import ( "fmt" "io" "go.yaml.in/yaml/v4" ) func Load(reader io.Reader) (*Config, error) { cfg, err := decode(reader) if err != nil { return nil, err } if err := Validate(cfg); err != nil { return nil, err } return cfg, nil } func decode(reader io.Reader) (*Config, error) { decoder := yaml.NewDecoder(reader) decoder.KnownFields(true) var cfg Config if err := decoder.Decode(&cfg); err != nil { return nil, fmt.Errorf("decode configuration: %w", err) } var extra any if err := decoder.Decode(&extra); err != io.EOF { if err != nil { return nil, fmt.Errorf("decode trailing configuration: %w", err) } return nil, fmt.Errorf("decode configuration: multiple YAML documents are not allowed") } return &cfg, nil }