Module plugx_config::entity

source ·
Expand description

Configuration entity for each plugin.

Example usage

use std::env::set_var;
use plugx_input::Input;
use url::Url;
use plugx_config::{
    entity::ConfigurationEntity,
    loader::{ConfigurationLoader, env::ConfigurationLoaderEnv},
    parser::{ConfigurationParser, env::ConfigurationParserEnv},
};

let url = "env://".parse::<Url>().expect("Valid URL");
let plugin_name = "foo";
let loader = ConfigurationLoaderEnv::new().with_prefix("MY_APP_NAME_").with_key_separator("__");
set_var("MY_APP_NAME_FOO__BAR__BAZ", "3.14");
set_var("MY_APP_NAME_FOO__QUX", "false");
let loaded = loader.try_load(&url, None).unwrap();
let foo_entity = loaded.get(plugin_name).unwrap();
// Above `loader` actually does this:
let loader_name = loader.name();
let mut foo_entity2 = ConfigurationEntity::new(url.clone(), plugin_name, loader_name)
    .with_format("env")
    .with_contents("BAR__BAZ=\"3.14\"\nQUX=\"false\"");

assert_eq!(&foo_entity2, foo_entity);

// We can pass a list of `ConfigurationParser` to an entity to parse its contents.
let parser = ConfigurationParserEnv::new().with_key_separator("__");
let parser_list: Vec<Box<dyn ConfigurationParser>> = vec![Box::new(parser)];
let input = foo_entity2.parse_contents_mut(&parser_list).unwrap();
assert_eq!(input.map_ref().unwrap().get("qux").unwrap(), &false.into());

Structs