Skip to content
This repository has been archived by the owner on Aug 25, 2024. It is now read-only.
/ configured Public archive

Utility to load configuration from well defined layers into any type which can be deserialized by Serde.

License

Notifications You must be signed in to change notification settings

hseeberger/configured

Repository files navigation

Configured

Crates.io license build

Opinionated utility to load a configuration from well defined layers into any type which can be deserialized by Serde using kebab-case.

First, values from the mandatory default configuration file at <CONFIG_DIR>/default.yaml are loaded.

Then, if the environment variable CONFIG_OVERLAYS is defined, its comma separated overlays (e.g. "prod" or "feat, dev") at <CONFIG_DIR>/<overlay>.yaml are loaded from left to right as overlays, i.e. adding or overwriting already existing values.

Finally environment variables prefixed with <CONFIG_ENV_PREFIX>__ and segments separated by __ (double underscores are used as segment separators to allow for single underscores in segment names) are used as final overlay.

Example

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Config {
    foo: Foo,
    qux: Qux,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Foo {
    bar: String,
    baz: String,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Qux {
    quux: String,
    corge_grault: String,
}

#[test]
fn test_load() -> Result<(), Error> {
    env::set_var(CONFIG_DIR, "test-config");
    env::set_var(CONFIG_OVERLAYS, "feat, dev");
    env::set_var("APP__QUX__CORGE_GRAULT", "corge-grault-env");

    let config = Config::load()?;

    assert_eq!(config.foo.bar.as_str(), "bar");
    assert_eq!(config.foo.baz.as_str(), "baz-dev");
    assert_eq!(config.qux.quux.as_str(), "quux-feat");
    assert_eq!(config.qux.corge_grault.as_str(), "corge-grault-env");

    Ok(())
}

Attribution

This utility is built on top of the fantastic Config library.

License

This code is open source software licensed under the Apache 2.0 License.

About

Utility to load configuration from well defined layers into any type which can be deserialized by Serde.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •