From 37899db3c5bf0b605ec9c53164e8f47c043b9524 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sat, 15 May 2021 14:58:35 +0200 Subject: [PATCH] events: Borrow raw JSON in EventContent::from_parts --- crates/ruma-events-macros/src/event.rs | 8 ++++---- crates/ruma-events-macros/src/event_content.rs | 2 +- crates/ruma-events-macros/src/event_enum.rs | 2 +- crates/ruma-events/src/custom.rs | 4 ++-- crates/ruma-events/src/lib.rs | 8 ++++---- crates/ruma-events/src/room/aliases.rs | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/ruma-events-macros/src/event.rs b/crates/ruma-events-macros/src/event.rs index e8fd083c..70e7c11d 100644 --- a/crates/ruma-events-macros/src/event.rs +++ b/crates/ruma-events-macros/src/event.rs @@ -179,14 +179,14 @@ fn expand_deserialize_event( let json = content.ok_or_else( || #serde::de::Error::missing_field("content"), )?; - C::from_parts(&event_type, json).map_err(A::Error::custom)? + C::from_parts(&event_type, &json).map_err(A::Error::custom)? }, #ruma_events::HasDeserializeFields::Optional => { let json = content.unwrap_or( #serde_json::value::RawValue::from_string("{}".to_owned()) .unwrap() ); - C::from_parts(&event_type, json).map_err(A::Error::custom)? + C::from_parts(&event_type, &json).map_err(A::Error::custom)? }, }; } @@ -194,7 +194,7 @@ fn expand_deserialize_event( quote! { let json = content.ok_or_else(|| #serde::de::Error::missing_field("content"))?; - let content = C::from_parts(&event_type, json).map_err(A::Error::custom)?; + let content = C::from_parts(&event_type, &json).map_err(A::Error::custom)?; } } else { quote! { @@ -207,7 +207,7 @@ fn expand_deserialize_event( if is_generic { quote! { let prev_content = if let Some(json) = prev_content { - Some(C::from_parts(&event_type, json).map_err(A::Error::custom)?) + Some(C::from_parts(&event_type, &json).map_err(A::Error::custom)?) } else { None }; diff --git a/crates/ruma-events-macros/src/event_content.rs b/crates/ruma-events-macros/src/event_content.rs index 3855cada..8a1c4639 100644 --- a/crates/ruma-events-macros/src/event_content.rs +++ b/crates/ruma-events-macros/src/event_content.rs @@ -345,7 +345,7 @@ fn generate_event_content_impl( fn from_parts( ev_type: &str, - content: Box<#serde_json::value::RawValue> + content: &#serde_json::value::RawValue, ) -> #serde_json::Result { if ev_type != #event_type { return Err(#serde::de::Error::custom( diff --git a/crates/ruma-events-macros/src/event_enum.rs b/crates/ruma-events-macros/src/event_enum.rs index e560ec5a..a95dec1b 100644 --- a/crates/ruma-events-macros/src/event_enum.rs +++ b/crates/ruma-events-macros/src/event_enum.rs @@ -411,7 +411,7 @@ fn expand_content_enum( fn from_parts( event_type: &::std::primitive::str, - input: ::std::boxed::Box<#serde_json::value::RawValue>, + input: &#serde_json::value::RawValue, ) -> #serde_json::Result { match event_type { #( diff --git a/crates/ruma-events/src/custom.rs b/crates/ruma-events/src/custom.rs index 0bf081e0..98215a4e 100644 --- a/crates/ruma-events/src/custom.rs +++ b/crates/ruma-events/src/custom.rs @@ -38,7 +38,7 @@ impl EventContent for CustomEventContent { &self.event_type } - fn from_parts(event_type: &str, content: Box) -> serde_json::Result { + fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result { let data = serde_json::from_str(content.get())?; Ok(Self { event_type: event_type.to_owned(), data }) } @@ -75,7 +75,7 @@ impl EventContent for RedactedCustomEventContent { &self.event_type } - fn from_parts(event_type: &str, _content: Box) -> serde_json::Result { + fn from_parts(event_type: &str, _content: &RawJsonValue) -> serde_json::Result { Ok(Self { event_type: event_type.to_owned() }) } } diff --git a/crates/ruma-events/src/lib.rs b/crates/ruma-events/src/lib.rs index 502a1a50..78855e8d 100644 --- a/crates/ruma-events/src/lib.rs +++ b/crates/ruma-events/src/lib.rs @@ -253,7 +253,7 @@ pub trait EventContent: Sized + Serialize { fn event_type(&self) -> &str; /// Constructs the given event content. - fn from_parts(event_type: &str, content: Box) -> serde_json::Result; + fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result; } /// Trait to define the behavior of redacting an event. @@ -285,12 +285,12 @@ pub trait RedactContent { /// Extension trait for Raw pub trait RawExt { /// Try to deserialize the JSON as an event's content. - fn deserialize_content(self, event_type: &str) -> serde_json::Result; + fn deserialize_content(&self, event_type: &str) -> serde_json::Result; } impl RawExt for Raw { - fn deserialize_content(self, event_type: &str) -> serde_json::Result { - T::from_parts(event_type, self.into_json()) + fn deserialize_content(&self, event_type: &str) -> serde_json::Result { + T::from_parts(event_type, self.json()) } } diff --git a/crates/ruma-events/src/room/aliases.rs b/crates/ruma-events/src/room/aliases.rs index caa9da87..d5eff14a 100644 --- a/crates/ruma-events/src/room/aliases.rs +++ b/crates/ruma-events/src/room/aliases.rs @@ -63,7 +63,7 @@ impl EventContent for RedactedAliasesEventContent { "m.room.aliases" } - fn from_parts(event_type: &str, content: Box) -> serde_json::Result { + fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result { if event_type != "m.room.aliases" { return Err(::serde::de::Error::custom(format!( "expected event type `m.room.aliases`, found `{}`",