diff --git a/crates/ruma-serde/CHANGELOG.md b/crates/ruma-serde/CHANGELOG.md index fa3aac2e..df3f20ce 100644 --- a/crates/ruma-serde/CHANGELOG.md +++ b/crates/ruma-serde/CHANGELOG.md @@ -1,5 +1,9 @@ # [unreleased] +Improvements: + +* Make `Raw::deserialize` & `Raw::deserialize_as` more general + # 0.4.1 Improvements: diff --git a/crates/ruma-serde/src/raw.rs b/crates/ruma-serde/src/raw.rs index 0c53cd68..1f9de598 100644 --- a/crates/ruma-serde/src/raw.rs +++ b/crates/ruma-serde/src/raw.rs @@ -5,7 +5,7 @@ use std::{ }; use serde::{ - de::{Deserialize, DeserializeOwned, Deserializer, IgnoredAny, MapAccess, Visitor}, + de::{Deserialize, Deserializer, IgnoredAny, MapAccess, Visitor}, ser::{Serialize, Serializer}, }; use serde_json::value::RawValue; @@ -127,21 +127,19 @@ impl Raw { deserializer.deserialize_map(SingleFieldVisitor::new(field_name)) } - /// Try to deserialize the JSON as a custom type. - pub fn deserialize_as(&self) -> serde_json::Result + /// Try to deserialize the JSON as the expected type. + pub fn deserialize<'a>(&'a self) -> serde_json::Result where - U: DeserializeOwned, + T: Deserialize<'a>, { serde_json::from_str(self.json.get()) } -} -impl Raw -where - T: DeserializeOwned, -{ - /// Try to deserialize the JSON as the expected type. - pub fn deserialize(&self) -> serde_json::Result { + /// Try to deserialize the JSON as a custom type. + pub fn deserialize_as<'a, U>(&'a self) -> serde_json::Result + where + U: Deserialize<'a>, + { serde_json::from_str(self.json.get()) } }