Module env

Module env 

Source
Expand description

Environment-Variables configuration loader (env feature which is enabled by default).

This is only usable if you enabled env Cargo feature.

§Example

use std::env::set_var;
use plugx_config::{
    loader::{Loader, env::Env},
    ext::url::Url,
};

set_var("MY_APP_NAME__FOO__B_A_R", "Baz");
set_var("MY_APP_NAME__QUX__ABC", "XYZ");

let url = Url::try_from("env://?prefix=MY_APP_NAME").expect("A valid URL!");

let mut loader = Env::new();
// You could set `prefix`, `separator`, and `strip_prefix` programmatically like this:
// loader.[set|with]_prefix("MY_APP_NAME");
// loader.[set|with]_separator("__");
// loader.[set|with]_strip_prefix(true);

// We do not set `whitelist` so we're going to load all plugins' configurations:
let mut maybe_whitelist = None;
let result = loader.load(&url, maybe_whitelist, false).unwrap();
let (_, foo) = result
    .iter()
    .find(|(plugin_name, _)| plugin_name == "foo")
    .expect("`foo` plugin config");
assert_eq!(foo.maybe_contents(), Some(&"B_A_R=\"Baz\"".to_string()));
let (_, qux) = result
    .iter()
    .find(|(plugin_name, _)| plugin_name == "qux")
    .expect("`qux` plugin config");
assert_eq!(qux.maybe_contents(), Some(&"ABC=\"XYZ\"".to_string()));

// Only load `foo` plugin configuration:
let whitelist = ["foo".to_string()].to_vec();
maybe_whitelist = Some(&whitelist);
let result = loader.load(&url, maybe_whitelist, false).unwrap();
assert!(result.iter().find(|(plugin_name, _)| plugin_name == "foo").is_some());
assert!(result.iter().find(|(plugin_name, _)| plugin_name == "qux").is_none());

See loader documentation to known how loaders work.

Modules§

default

Structs§

Env
Loads configurations from Environment-Variables.

Constants§

NAME
SCHEME_LIST