Module entity

Module entity 

Source
Expand description

Configuration entity for each plugin.

§Example usage

use std::env::set_var;
use plugx_config::{
    ext::{url::Url, plugx_input::Input},
    entity::ConfigurationEntity,
    loader::{Loader, env::Env as EnvLoader},
    parser::{Parser, env::Env as EnvParser},
};

let url = "env://".parse::<Url>().expect("Valid URL");
let plugin_name = "foo";
let loader = EnvLoader::new().with_prefix("MY_APP_NAME").with_separator("__");
set_var("MY_APP_NAME__FOO__BAR__BAZ", "3.14");
set_var("MY_APP_NAME__FOO__QUX", "false");
let loaded = loader.load(&url, None, false).unwrap();
let (_, foo_entity) = loaded.iter().find(|(plugin_name, _)| plugin_name == "foo").expect("`foo` plugin config");
// Above `loader` actually does this:
let loader_name = format!("{loader}");
let mut foo_entity2 = ConfigurationEntity::new("MY_APP_NAME__*", 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 = EnvParser::new().with_key_separator("__");
let parser_list: Vec<Box<dyn Parser>> = vec![Box::new(parser)];
let input = foo_entity2.parse_contents_mut(&parser_list).unwrap();
assert_eq!(input.as_map().get("qux").expect("`qux` value"), &false.into());

Structs§

ConfigurationEntity
A configuration entity for each plugin.