package config import ( "fmt" mcdslconfig "git.wntrmute.dev/kyle/mcdsl/config" ) // Config is the top-level MCNS configuration. type Config struct { mcdslconfig.Base DNS DNSConfig `toml:"dns"` } // DNSConfig holds the DNS server settings. type DNSConfig struct { ListenAddr string `toml:"listen_addr"` Upstreams []string `toml:"upstreams"` } // Load reads a TOML config file, applies environment variable overrides // (MCNS_ prefix), sets defaults, and validates required fields. func Load(path string) (*Config, error) { cfg, err := mcdslconfig.Load[Config](path, "MCNS") if err != nil { return nil, err } // Apply DNS defaults. if cfg.DNS.ListenAddr == "" { cfg.DNS.ListenAddr = ":53" } if len(cfg.DNS.Upstreams) == 0 { cfg.DNS.Upstreams = []string{"1.1.1.1:53", "8.8.8.8:53"} } return cfg, nil } // Validate implements the mcdsl config.Validator interface. func (c *Config) Validate() error { if c.Database.Path == "" { return fmt.Errorf("database.path is required") } if c.MCIAS.ServerURL == "" { return fmt.Errorf("mcias.server_url is required") } if c.Server.TLSCert == "" { return fmt.Errorf("server.tls_cert is required") } if c.Server.TLSKey == "" { return fmt.Errorf("server.tls_key is required") } return nil }