From 9d9de257ae075d0e9976cf110ef2f5049bed76de Mon Sep 17 00:00:00 2001 From: Gareth Johnson Date: Sat, 24 Feb 2024 10:49:04 +0000 Subject: [PATCH] PR feedback --- src/haystack/encoding/json/decode.rs | 41 +++++++++------------------- src/haystack/encoding/json/encode.rs | 2 +- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/haystack/encoding/json/decode.rs b/src/haystack/encoding/json/decode.rs index 0bbdb20..d7d558c 100644 --- a/src/haystack/encoding/json/decode.rs +++ b/src/haystack/encoding/json/decode.rs @@ -105,15 +105,14 @@ impl<'de> Deserialize<'de> for Ref { let val = deserializer.deserialize_any(HValVisitor)?; match val { HVal::Ref(val) => { - let dis = get_ref_dis_from_factory(val.value.as_str(), val.dis.as_deref()) - .map(|v| v.to_string()); + let dis = get_ref_dis_from_factory(val.value.as_str(), val.dis.as_deref()); - Ok(if dis == val.dis { + Ok(if dis.as_deref() == val.dis.as_deref() { val } else { Ref { value: val.value, - dis, + dis: dis.map(|d| d.into_owned()), } }) } @@ -388,31 +387,17 @@ fn parse_number(dict: &Dict) -> Result { } fn parse_ref(dict: &Dict) -> Result { - match dict.get_str("val") { - Some(val) => match dict.get_str("dis") { - Some(dis) => { - let dis = get_ref_dis_from_factory(val.value.as_str(), Some(dis.as_str())) - .map(|val| val.to_string()); - - Ok(Ref { - value: val.value.clone(), - dis, - } - .into()) - } - None => { - let dis = - get_ref_dis_from_factory(val.value.as_str(), None).map(|val| val.to_string()); - - Ok(Ref { - value: val.value.clone(), - dis, - } - .into()) + dict.get_str("val") + .map(|val| { + let dis_str = dict.get_str("dis").map(|d| d.as_str()); + let dis = get_ref_dis_from_factory(&val.value, dis_str).map(|val| val.into_owned()); + Ref { + value: val.value.clone(), + dis, } - }, - None => Err(JsonErr::custom("Missing or invalid 'val'")), - } + .into() + }) + .ok_or_else(|| JsonErr::custom("Missing or invalid 'val'")) } fn parse_symbol(dict: &Dict) -> Result { diff --git a/src/haystack/encoding/json/encode.rs b/src/haystack/encoding/json/encode.rs index 84f9818..105cf93 100644 --- a/src/haystack/encoding/json/encode.rs +++ b/src/haystack/encoding/json/encode.rs @@ -59,7 +59,7 @@ impl Serialize for Ref { map.serialize_entry("val", &self.value)?; let dis = get_ref_dis_from_factory(self.value.as_str(), self.dis.as_deref()) - .map(|v| v.to_string()) + .map(|v| v.into_owned()) .or_else(|| self.dis.clone()); if dis.is_some() {