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(
|
let json = content.ok_or_else(
|
||||||
|| #serde::de::Error::missing_field("content"),
|
|| #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 => {
|
#ruma_events::HasDeserializeFields::Optional => {
|
||||||
let json = content.unwrap_or(
|
let json = content.unwrap_or(
|
||||||
#serde_json::value::RawValue::from_string("{}".to_owned())
|
#serde_json::value::RawValue::from_string("{}".to_owned())
|
||||||
.unwrap()
|
.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! {
|
quote! {
|
||||||
let json =
|
let json =
|
||||||
content.ok_or_else(|| #serde::de::Error::missing_field("content"))?;
|
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 {
|
} else {
|
||||||
quote! {
|
quote! {
|
||||||
@ -207,7 +207,7 @@ fn expand_deserialize_event(
|
|||||||
if is_generic {
|
if is_generic {
|
||||||
quote! {
|
quote! {
|
||||||
let prev_content = if let Some(json) = prev_content {
|
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 {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -345,7 +345,7 @@ fn generate_event_content_impl(
|
|||||||
|
|
||||||
fn from_parts(
|
fn from_parts(
|
||||||
ev_type: &str,
|
ev_type: &str,
|
||||||
content: Box<#serde_json::value::RawValue>
|
content: &#serde_json::value::RawValue,
|
||||||
) -> #serde_json::Result<Self> {
|
) -> #serde_json::Result<Self> {
|
||||||
if ev_type != #event_type {
|
if ev_type != #event_type {
|
||||||
return Err(#serde::de::Error::custom(
|
return Err(#serde::de::Error::custom(
|
||||||
|
@ -411,7 +411,7 @@ fn expand_content_enum(
|
|||||||
|
|
||||||
fn from_parts(
|
fn from_parts(
|
||||||
event_type: &::std::primitive::str,
|
event_type: &::std::primitive::str,
|
||||||
input: ::std::boxed::Box<#serde_json::value::RawValue>,
|
input: &#serde_json::value::RawValue,
|
||||||
) -> #serde_json::Result<Self> {
|
) -> #serde_json::Result<Self> {
|
||||||
match event_type {
|
match event_type {
|
||||||
#(
|
#(
|
||||||
|
@ -38,7 +38,7 @@ impl EventContent for CustomEventContent {
|
|||||||
&self.event_type
|
&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())?;
|
let data = serde_json::from_str(content.get())?;
|
||||||
Ok(Self { event_type: event_type.to_owned(), data })
|
Ok(Self { event_type: event_type.to_owned(), data })
|
||||||
}
|
}
|
||||||
@ -75,7 +75,7 @@ impl EventContent for RedactedCustomEventContent {
|
|||||||
&self.event_type
|
&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() })
|
Ok(Self { event_type: event_type.to_owned() })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ pub trait EventContent: Sized + Serialize {
|
|||||||
fn event_type(&self) -> &str;
|
fn event_type(&self) -> &str;
|
||||||
|
|
||||||
/// Constructs the given event content.
|
/// 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.
|
/// Trait to define the behavior of redacting an event.
|
||||||
@ -285,12 +285,12 @@ pub trait RedactContent {
|
|||||||
/// Extension trait for Raw<EventContent>
|
/// Extension trait for Raw<EventContent>
|
||||||
pub trait RawExt<T: EventContent> {
|
pub trait RawExt<T: EventContent> {
|
||||||
/// Try to deserialize the JSON as an event's content.
|
/// 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> {
|
impl<T: EventContent> RawExt<T> for Raw<T> {
|
||||||
fn deserialize_content(self, event_type: &str) -> serde_json::Result<T> {
|
fn deserialize_content(&self, event_type: &str) -> serde_json::Result<T> {
|
||||||
T::from_parts(event_type, self.into_json())
|
T::from_parts(event_type, self.json())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ impl EventContent for RedactedAliasesEventContent {
|
|||||||
"m.room.aliases"
|
"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" {
|
if event_type != "m.room.aliases" {
|
||||||
return Err(::serde::de::Error::custom(format!(
|
return Err(::serde::de::Error::custom(format!(
|
||||||
"expected event type `m.room.aliases`, found `{}`",
|
"expected event type `m.room.aliases`, found `{}`",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user