proxy-pool/internal/config/load.go

38 lines
762 B
Go

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
}