summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Brandt <johnb0@outlook.com>2021-04-11 20:27:37 -0600
committerJohn Brandt <johnb0@outlook.com>2021-05-04 10:31:53 -0600
commitfc439d0752e1e8c525ded41dbade323c789a5b48 (patch)
treebb27351d210fe15e67b18d58ed506e78d47aa8d3
parent2048c033bbccaa5398c5db3b2b2589e34a614015 (diff)
more predictable env parsing and reduced clones
-rw-r--r--src/env.rs26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/env.rs b/src/env.rs
index 5f6491b..6c3d073 100644
--- a/src/env.rs
+++ b/src/env.rs
@@ -126,27 +126,21 @@ impl Source for Environment {
}
let value = if self.try_parsing {
- let string_value = Value::new(Some(&uri), ValueKind::String(value.clone()));
- let is_true_false =
- value.to_lowercase() == "true" || value.to_lowercase() == "false";
-
- // if the value is "true" or "false" it should be parsed as a bool
- if let (true, Ok(parsed)) = (is_true_false, string_value.clone().into_bool()) {
- ValueKind::Boolean(parsed)
- } else if let Ok(parsed) = string_value.clone().into_int() {
- ValueKind::Integer(parsed)
- } else if let Ok(parsed) = string_value.clone().into_float() {
- ValueKind::Float(parsed)
- } else if let Ok(parsed) = string_value.clone().into_bool() {
- ValueKind::Boolean(parsed)
+ // convert to lowercase because bool parsing expects all lowercase
+ if let Ok(parsed) = value.to_lowercase().parse::<bool>() {
+ Value::new(Some(&uri), ValueKind::Boolean(parsed))
+ } else if let Ok(parsed) = value.parse::<i64>() {
+ Value::new(Some(&uri), ValueKind::Integer(parsed))
+ } else if let Ok(parsed) = value.parse::<f64>() {
+ Value::new(Some(&uri), ValueKind::Float(parsed))
} else {
- ValueKind::String(value)
+ Value::new(Some(&uri), ValueKind::String(value))
}
} else {
- ValueKind::String(value)
+ Value::new(Some(&uri), ValueKind::String(value))
};
- m.insert(key.to_lowercase(), Value::new(Some(&uri), value));
+ m.insert(key.to_lowercase(), value);
}
Ok(m)