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]
fn set<F, D>(&'static self, initializer: F) where
F: Fn(&'static str) -> D + Send + Sync + 'static,
D: for<'de> Deserializer<'de> + 'static, [src]
F: Fn(&'static str) -> D + Send + Sync + 'static,
D: for<'de> Deserializer<'de> + 'static,
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:
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) } }
fn get(&'static self, package: &'static str) -> Box<DynamicDeserializer>[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.