From 4689ed7b30b8240062751336f4ae6df9cbb7abba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Mon, 18 Mar 2019 22:02:37 +0100 Subject: [PATCH] Changed uppercase deserializer to avoid a clone. --- src/util.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/util.rs b/src/util.rs index 736b9f8..c9815f1 100644 --- a/src/util.rs +++ b/src/util.rs @@ -218,7 +218,7 @@ impl<'de> Visitor<'de> for UpCaseVisitor { let mut result_map = JsonMap::new(); while let Some((key, value)) = map.next_entry()? { - result_map.insert(upcase_first(key), upcase_value(&value)); + result_map.insert(upcase_first(key), upcase_value(value)); } Ok(Value::Object(result_map)) @@ -231,32 +231,32 @@ impl<'de> Visitor<'de> for UpCaseVisitor { let mut result_seq = Vec::::new(); while let Some(value) = seq.next_element()? { - result_seq.push(upcase_value(&value)); + result_seq.push(upcase_value(value)); } Ok(Value::Array(result_seq)) } } -fn upcase_value(value: &Value) -> Value { - if let Some(map) = value.as_object() { +fn upcase_value(value: Value) -> Value { + if let Value::Object(map) = value { let mut new_value = json!({}); - for (key, val) in map { - let processed_key = _process_key(key); + for (key, val) in map.into_iter() { + let processed_key = _process_key(&key); new_value[processed_key] = upcase_value(val); } new_value - } else if let Some(array) = value.as_array() { + } else if let Value::Array(array) = value { // Initialize array with null values let mut new_value = json!(vec![Value::Null; array.len()]); - for (index, val) in array.iter().enumerate() { + for (index, val) in array.into_iter().enumerate() { new_value[index] = upcase_value(val); } new_value } else { - value.clone() + value } }