Struct configure::source::ActiveConfiguration [] [src]

pub struct ActiveConfiguration { /* fields omitted */ }

The active configuration source.

The onyl value of this type is the CONFIGURATION global static, which controls what the source of configuration values is. End users can set the configuration source using the set method, while libraries which need to be configured can use the get method.

Methods

impl ActiveConfiguration
[src]

[src]

Set the active configuration.

This can only be called once. If it is called more than once, subsequent calls have no effect. This should only be called by the final binary which is using the configuration, it should not be called by libraries.

If you set the active configuration, you should do so very early in your program, preferably as close to the beginning of main as possible. That way, the configuration source is consistent for every dependency.

For example, if you wanted to store each dependency's config in a JSON separate file per dependency:

Be careful when using this code, it's not being tested!
use std::fs::File;
use std::env;
use std::path::PathBuf;

use configure::source::CONFIGURATION;
use serde_json::Deserializer;

fn main() {
    let dir: PathBuf = env::var_os("CARGO_MANIFEST_DIR").unwrap().into();
    CONFIGURATION.set(move |package| {
        let file = File::open(dir.join(format!("{}.json", package)));
        Deserializer::new(file)
    }
}

[src]

Get the active configuration.

Libraries which need to construct configuration can use this to get the active source of configuration. Normally they would derive Configure for their config struct, which will call this method.