// Load an extensible section that has a type keyword func LoadExtensibleSection(app *Application, sectionName string, extensions AvailableExtensions, env envconf.Environment, configFile ConfigFile) (obj HasConfigStruct, err error) { confSection := new(ExtensibleGlobals) conf, ok := configFile[sectionName] if !ok { return nil, fmt.Errorf("Missing section '%s'", sectionName) } if err = toml.PrimitiveDecode(conf, confSection); err != nil { return nil, err } if err = env.Decode(toEnvName(sectionName), EnvSep, confSection); err != nil { return nil, err } ext, ok := extensions.Get(confSection.Typ) if !ok { //TODO: Add log info to indicate using "default" return nil, fmt.Errorf("No type '%s' available to load for section '%s'", confSection.Typ, sectionName) } obj = ext() loadedConfig, err := LoadConfigStruct(sectionName, env, conf, obj) if err != nil { return nil, err } err = obj.Init(app, loadedConfig) return obj, err }
// Loads the config for a section supplied, configures the supplied object, and initializes func LoadConfigForSection(app *Application, sectionName string, obj HasConfigStruct, env envconf.Environment, configFile ConfigFile) (err error) { conf, ok := configFile[sectionName] if !ok { return fmt.Errorf("Error loading config file, section: %s", sectionName) } confStruct := obj.ConfigStruct() if confStruct == nil { return nil } if err = toml.PrimitiveDecode(conf, confStruct); err != nil { return fmt.Errorf("Unable to decode config for section '%s': %s", sectionName, err) } if err = env.Decode(toEnvName(sectionName), EnvSep, confStruct); err != nil { return fmt.Errorf("Invalid environment variable for section '%s': %s", sectionName, err) } err = obj.Init(app, confStruct) return }
func loadEnvConfig(env envconf.Environment, section string, app *Application, configable HasConfigStruct) (err error) { confStruct := configable.ConfigStruct() if err = env.Decode(toEnvName(section), EnvSep, confStruct); err != nil { return fmt.Errorf("Error decoding config for section %q: %s", section, err) } return configable.Init(app, confStruct) }
// Applies environment variable overrides to confStruct and initializes obj func LoadConfigFromEnvironment(app *Application, sectionName string, obj HasInit, env envconf.Environment, confStruct interface{}) (err error) { if confStruct == nil { return nil } if err = env.Decode(toEnvName(sectionName), EnvSep, confStruct); err != nil { return fmt.Errorf("Invalid environment variable for section '%s': %s", sectionName, err) } return obj.Init(app, confStruct) }