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