// Package config owns application configuration structures, defaults, loading, // precedence, and validation. package config import "time" type MissingSourcePolicy string const ( MissingSourceError MissingSourcePolicy = "error" MissingSourceWarn MissingSourcePolicy = "warn" MissingSourceNone MissingSourcePolicy = "none" ) type Config struct { WeatherAPI WeatherAPIConfig `yaml:"weather_api"` MissingSource MissingSourceConfig `yaml:"missing_source"` Scriptorium ScriptoriumConfig `yaml:"scriptorium"` Workspace WorkspaceConfig `yaml:"workspace"` Reports ReportOutputConfig `yaml:"reports"` Dayparts []DaypartConfig `yaml:"dayparts"` RecentChange RecentChangeConfig `yaml:"recent_change"` } type WeatherAPIConfig struct { BaseURL string `yaml:"base_url"` Timeout time.Duration `yaml:"timeout"` Precision int `yaml:"precision"` Units string `yaml:"units"` Timezone string `yaml:"timezone"` Format string `yaml:"format"` } type MissingSourceConfig struct { Default MissingSourcePolicy `yaml:"default"` Sources map[string]MissingSourcePolicy `yaml:"sources"` } type ScriptoriumConfig struct { Binary string `yaml:"binary"` ConfigPath string `yaml:"config_path"` Profile string `yaml:"profile"` Timeout time.Duration `yaml:"timeout"` ExtraArgs []string `yaml:"extra_args"` } type WorkspaceConfig struct { Root string `yaml:"root"` SnapshotsDir string `yaml:"snapshots_dir"` ReportsDir string `yaml:"reports_dir"` DataPackagesDir string `yaml:"data_packages_dir"` PreflightDir string `yaml:"preflight_dir"` } type ReportOutputConfig struct { OutputDir string `yaml:"output_dir"` Paths map[string]string `yaml:"paths"` } type DaypartConfig struct { Name string `yaml:"name"` Start string `yaml:"start"` End string `yaml:"end"` } type RecentChangeConfig struct { TemperatureDegrees float64 `yaml:"temperature_degrees"` PrecipProbabilityPoints int `yaml:"precip_probability_points"` WindGustMilesPerHour int `yaml:"wind_gust_miles_per_hour"` PrecipTimingShiftMinutes int `yaml:"precip_timing_shift_minutes"` }