1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub use use_config_key;
5pub use use_config_layer;
6pub use use_config_profile;
7pub use use_config_secret;
8pub use use_config_source;
9pub use use_config_value;
10
11pub mod prelude {
13 pub use use_config_key::{ConfigKey, ConfigKeyError, ConfigPath, ConfigSection};
14 pub use use_config_layer::{ConfigLayer, merge_layers, merge_two_layers};
15 pub use use_config_profile::{ConfigProfile, ConfigProfileError};
16 pub use use_config_secret::{Redacted, SecretRef, SecretRefError};
17 pub use use_config_source::{ConfigSource, ConfigSourceKind};
18 pub use use_config_value::ConfigValue;
19}
20
21#[cfg(test)]
22mod tests {
23 use super::prelude::{
24 ConfigLayer, ConfigPath, ConfigSource, ConfigSourceKind, ConfigValue, merge_layers,
25 };
26
27 #[test]
28 fn facade_exposes_configuration_primitives() {
29 let path = ConfigPath::parse("server.port").expect("path should parse");
30 let mut defaults = ConfigLayer::new(ConfigSource::unnamed(ConfigSourceKind::Default, 0));
31 let mut overrides = ConfigLayer::new(ConfigSource::unnamed(ConfigSourceKind::Override, 10));
32
33 defaults.insert(path.clone(), ConfigValue::from(8080_i64));
34 overrides.insert(path.clone(), ConfigValue::from(9090_i64));
35
36 let merged = merge_layers([&defaults, &overrides]);
37
38 assert_eq!(merged.get(&path).and_then(ConfigValue::as_i64), Some(9090));
39 }
40}