diff --git a/ruma-serde/src/canonical_json/value.rs b/ruma-serde/src/canonical_json/value.rs index c9421448..385c63db 100644 --- a/ruma-serde/src/canonical_json/value.rs +++ b/ruma-serde/src/canonical_json/value.rs @@ -122,8 +122,8 @@ impl fmt::Display for CanonicalJsonValue { impl TryFrom for CanonicalJsonValue { type Error = Error; - fn try_from(json: JsonValue) -> Result { - Ok(match json { + fn try_from(val: JsonValue) -> Result { + Ok(match val { JsonValue::Bool(b) => Self::Bool(b), JsonValue::Number(num) => Self::Integer( Int::try_from(num.as_i64().ok_or(Error::IntConvert)?) @@ -143,6 +143,23 @@ impl TryFrom for CanonicalJsonValue { } } +impl From for JsonValue { + fn from(val: CanonicalJsonValue) -> Self { + match val { + CanonicalJsonValue::Bool(b) => Self::Bool(b), + CanonicalJsonValue::Integer(int) => Self::Number(i64::from(int).into()), + CanonicalJsonValue::String(string) => Self::String(string), + CanonicalJsonValue::Array(vec) => { + Self::Array(vec.into_iter().map(Into::into).collect()) + } + CanonicalJsonValue::Object(obj) => { + Self::Object(obj.into_iter().map(|(k, v)| (k, v.into())).collect()) + } + CanonicalJsonValue::Null => Self::Null, + } + } +} + impl Serialize for CanonicalJsonValue { #[inline] fn serialize(&self, serializer: S) -> Result