diff options
author | Jérémy Audiger <jeremy.audiger@ioterop.com> | 2022-03-11 07:36:50 +0000 |
---|---|---|
committer | Jérémy Audiger <jeremy.audiger@ioterop.com> | 2022-03-11 07:36:50 +0000 |
commit | e765bd484eceead51314ed33e63ff6bf10475f6b (patch) | |
tree | d882d973ea5eadf30114bb6222c71a4f638a875b | |
parent | 2e9ccf751dddf1f52b4634dc1ef4ed954cf0123e (diff) |
chore: add the possibility to keep the prefix from env var.
-rw-r--r-- | src/env.rs | 14 | ||||
-rw-r--r-- | tests/env.rs | 21 |
2 files changed, 33 insertions, 2 deletions
@@ -37,6 +37,9 @@ pub struct Environment { /// Parses booleans, integers and floats if they're detected (can be safely parsed). try_parsing: bool, + // Preserve the prefix while parsing + keep_prefix: bool, + /// Alternate source for the environment. This can be used when you want to test your own code /// using this source, without the need to change the actual system environment variables. /// @@ -136,6 +139,11 @@ impl Environment { self } + pub fn keep_prefix(mut self, keep: bool) -> Self { + self.keep_prefix = keep; + self + } + pub fn source(mut self, source: Option<Map<String, String>>) -> Self { self.source = source; self @@ -175,8 +183,10 @@ impl Source for Environment { // Check for prefix if let Some(ref prefix_pattern) = prefix_pattern { if key.starts_with(prefix_pattern) { - // Remove this prefix from the key - key = key[prefix_pattern.len()..].to_string(); + if !self.keep_prefix { + // Remove this prefix from the key + key = key[prefix_pattern.len()..].to_string(); + } } else { // Skip this key return; diff --git a/tests/env.rs b/tests/env.rs index fcadf81..166a83f 100644 --- a/tests/env.rs +++ b/tests/env.rs @@ -75,6 +75,27 @@ fn test_empty_value_is_ignored() { } #[test] +fn test_keep_prefix() { + env::set_var("C_A_B", ""); + + // Do not keep the prefix + let environment = Environment::with_prefix("C"); + + assert!(environment.collect().unwrap().contains_key("a_b")); + + let environment = Environment::with_prefix("C").keep_prefix(false); + + assert!(environment.collect().unwrap().contains_key("a_b")); + + // Keep the prefix + let environment = Environment::with_prefix("C").keep_prefix(true); + + assert!(environment.collect().unwrap().contains_key("c_a_b")); + + env::remove_var("C_A_B"); +} + +#[test] fn test_custom_separator_behavior() { env::set_var("C.B.A", "abc"); |