package yamlsettings_test import ( "bytes" "fmt" "testing" "git.kirsle.net/go/yamlsettings" ) func TestLoadReaders(t *testing.T) { type Settings struct { Databases struct { PrimarySQL struct { User string `yaml:"user"` Passwd string `yaml:"passwd"` Host string `yaml:"host"` DB string `yaml:"db"` Compress bool `yaml:"compress"` Engine string `yaml:"engine"` } `yaml:"primary_sql"` Redis struct { Host string `yaml:"redis_host"` Port int `yaml:"redis_port"` } `yaml:"redis"` } `yaml:"databases"` AppConfig struct { Debug bool `yaml:"DEBUG"` SecretKey string `yaml:"SECRET_KEY"` } `yaml:"app_config"` DebugSQL bool `yaml:"debug_sql"` DebugProfiler bool `yaml:"debug_profiler"` } // The defaults.yml file you can commit to version control, // it's used as the template config that contains all options, // has sensible defaults where possible or "CHANGE_ME" where not. var ( defaultsYaml = bytes.NewBuffer([]byte(`--- # Program Defaults, do not edit this file!!! # All values should be overridden in the settings.yml file. databases: primary_sql: user: my_user passwd: password_here host: db-bouncer-01.postgres.com:5432 db: postgres compress: true engine: postgresql2 redis: redis_host: 127.0.0.1 redis_port: 6379 app_config: DEBUG: false SECRET_KEY: hard key to guess and keep values secret debug_sql: false debug_profiler: false`)) settingsYaml = bytes.NewBuffer([]byte(`--- databases: primary_sql: user: root passwd: god redis: redis_host: redis.service.com app_config: DEBUG: true SECRET_KEY: sdfasjksdfASFAS23423f@#$%!$#VR@%UQ% debug_sql: true`)) ) // Load the defaults and the optional settings file. // yamlsettings.LoadFiles("defaults.yml", "settings.yml", &config) var config Settings yamlsettings.LoadReaders(defaultsYaml, settingsYaml, &config) fmt.Printf("Redis host: %s\n", config.Databases.Redis.Host) fmt.Printf("Secret: %s\n", config.AppConfig.SecretKey) // Load from yaml files on disk. yamlsettings.LoadFiles("example/defaults.yml", "example/settings.yml", &config) fmt.Printf("Redis host: %s\n", config.Databases.Redis.Host) }