Skip to main content

use_config/
lib.rs

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
11/// Common primitive configuration vocabulary reexports.
12pub 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}