Skip to content

Commit fc439d0

Browse files
committed
more predictable env parsing and reduced clones
1 parent 2048c03 commit fc439d0

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/env.rs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -126,27 +126,21 @@ impl Source for Environment {
126126
}
127127

128128
let value = if self.try_parsing {
129-
let string_value = Value::new(Some(&uri), ValueKind::String(value.clone()));
130-
let is_true_false =
131-
value.to_lowercase() == "true" || value.to_lowercase() == "false";
132-
133-
// if the value is "true" or "false" it should be parsed as a bool
134-
if let (true, Ok(parsed)) = (is_true_false, string_value.clone().into_bool()) {
135-
ValueKind::Boolean(parsed)
136-
} else if let Ok(parsed) = string_value.clone().into_int() {
137-
ValueKind::Integer(parsed)
138-
} else if let Ok(parsed) = string_value.clone().into_float() {
139-
ValueKind::Float(parsed)
140-
} else if let Ok(parsed) = string_value.clone().into_bool() {
141-
ValueKind::Boolean(parsed)
129+
// convert to lowercase because bool parsing expects all lowercase
130+
if let Ok(parsed) = value.to_lowercase().parse::<bool>() {
131+
Value::new(Some(&uri), ValueKind::Boolean(parsed))
132+
} else if let Ok(parsed) = value.parse::<i64>() {
133+
Value::new(Some(&uri), ValueKind::Integer(parsed))
134+
} else if let Ok(parsed) = value.parse::<f64>() {
135+
Value::new(Some(&uri), ValueKind::Float(parsed))
142136
} else {
143-
ValueKind::String(value)
137+
Value::new(Some(&uri), ValueKind::String(value))
144138
}
145139
} else {
146-
ValueKind::String(value)
140+
Value::new(Some(&uri), ValueKind::String(value))
147141
};
148142

149-
m.insert(key.to_lowercase(), Value::new(Some(&uri), value));
143+
m.insert(key.to_lowercase(), value);
150144
}
151145

152146
Ok(m)

0 commit comments

Comments
 (0)