summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-05-15 14:46:35 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-05-15 14:53:43 +0200
commitc461a6ff6b141b4300c4fc590c07d5896cfc4c5c (patch)
tree5d70657498b8be4a7ecf13e1304c85256d2b308b
parent935d3a332ef7fd9d41c2700ab397a21b8249bffd (diff)
Simplify impl of from_json5_value()
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/file/format/json5.rs41
1 files changed, 18 insertions, 23 deletions
diff --git a/src/file/format/json5.rs b/src/file/format/json5.rs
index cc550c0..33a3135 100644
--- a/src/file/format/json5.rs
+++ b/src/file/format/json5.rs
@@ -37,35 +37,30 @@ pub fn parse(
}
fn from_json5_value(uri: Option<&String>, value: Val) -> Value {
- match value {
- Val::String(v) => Value::new(uri, ValueKind::String(v)),
-
- Val::Integer(v) => Value::new(uri, ValueKind::Integer(v)),
-
- Val::Float(v) => Value::new(uri, ValueKind::Float(v)),
-
- Val::Boolean(v) => Value::new(uri, ValueKind::Boolean(v)),
-
+ let vk = match value {
+ Val::Null => ValueKind::Nil,
+ Val::String(v) => ValueKind::String(v),
+ Val::Integer(v) => ValueKind::Integer(v),
+ Val::Float(v) => ValueKind::Float(v),
+ Val::Boolean(v) => ValueKind::Boolean(v),
Val::Object(table) => {
- let mut m = HashMap::new();
+ let m = table
+ .into_iter()
+ .map(|(k, v)| (k, from_json5_value(uri, v)))
+ .collect();
- for (key, value) in table {
- m.insert(key, from_json5_value(uri, value));
- }
-
- Value::new(uri, ValueKind::Table(m))
+ ValueKind::Table(m)
}
Val::Array(array) => {
- let mut l = Vec::new();
-
- for value in array {
- l.push(from_json5_value(uri, value));
- }
+ let l = array
+ .into_iter()
+ .map(|v| from_json5_value(uri, v))
+ .collect();
- Value::new(uri, ValueKind::Array(l))
+ ValueKind::Array(l)
}
+ };
- Val::Null => Value::new(uri, ValueKind::Nil),
- }
+ Value::new(uri, vk)
}