diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-05-15 14:46:35 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-05-15 14:53:43 +0200 |
commit | c461a6ff6b141b4300c4fc590c07d5896cfc4c5c (patch) | |
tree | 5d70657498b8be4a7ecf13e1304c85256d2b308b | |
parent | 935d3a332ef7fd9d41c2700ab397a21b8249bffd (diff) |
Simplify impl of from_json5_value()
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/file/format/json5.rs | 41 |
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) } |