events: Borrow raw JSON in EventContent::from_parts
This commit is contained in:
parent
16e8f498b4
commit
37899db3c5
@ -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
|
||||
};
|
||||
|
@ -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<Self> {
|
||||
if ev_type != #event_type {
|
||||
return Err(#serde::de::Error::custom(
|
||||
|
@ -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<Self> {
|
||||
match event_type {
|
||||
#(
|
||||
|
@ -38,7 +38,7 @@ impl EventContent for CustomEventContent {
|
||||
&self.event_type
|
||||
}
|
||||
|
||||
fn from_parts(event_type: &str, content: Box<RawJsonValue>) -> serde_json::Result<Self> {
|
||||
fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result<Self> {
|
||||
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<RawJsonValue>) -> serde_json::Result<Self> {
|
||||
fn from_parts(event_type: &str, _content: &RawJsonValue) -> serde_json::Result<Self> {
|
||||
Ok(Self { event_type: event_type.to_owned() })
|
||||
}
|
||||
}
|
||||
|
@ -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<RawJsonValue>) -> serde_json::Result<Self>;
|
||||
fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result<Self>;
|
||||
}
|
||||
|
||||
/// Trait to define the behavior of redacting an event.
|
||||
@ -285,12 +285,12 @@ pub trait RedactContent {
|
||||
/// Extension trait for Raw<EventContent>
|
||||
pub trait RawExt<T: EventContent> {
|
||||
/// Try to deserialize the JSON as an event's content.
|
||||
fn deserialize_content(self, event_type: &str) -> serde_json::Result<T>;
|
||||
fn deserialize_content(&self, event_type: &str) -> serde_json::Result<T>;
|
||||
}
|
||||
|
||||
impl<T: EventContent> RawExt<T> for Raw<T> {
|
||||
fn deserialize_content(self, event_type: &str) -> serde_json::Result<T> {
|
||||
T::from_parts(event_type, self.into_json())
|
||||
fn deserialize_content(&self, event_type: &str) -> serde_json::Result<T> {
|
||||
T::from_parts(event_type, self.json())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ impl EventContent for RedactedAliasesEventContent {
|
||||
"m.room.aliases"
|
||||
}
|
||||
|
||||
fn from_parts(event_type: &str, content: Box<RawJsonValue>) -> serde_json::Result<Self> {
|
||||
fn from_parts(event_type: &str, content: &RawJsonValue) -> serde_json::Result<Self> {
|
||||
if event_type != "m.room.aliases" {
|
||||
return Err(::serde::de::Error::custom(format!(
|
||||
"expected event type `m.room.aliases`, found `{}`",
|
||||
|
Loading…
x
Reference in New Issue
Block a user