events: Add original_content accessor for possibly-redacted event enums
This commit is contained in:
		
							parent
							
								
									70ea38b138
								
							
						
					
					
						commit
						d412a80127
					
				| @ -440,10 +440,35 @@ fn expand_accessor_methods( | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     let content_accessors = (!maybe_redacted).then(|| { |     let content_enum = kind.to_content_enum(); | ||||||
|         let content_enum = kind.to_content_enum(); |     let content_variants: Vec<_> = variants.iter().map(|v| v.ctor(&content_enum)).collect(); | ||||||
|         let content_variants: Vec<_> = variants.iter().map(|v| v.ctor(&content_enum)).collect(); |     let content_accessor = if maybe_redacted { | ||||||
| 
 |         quote! { | ||||||
|  |             /// Returns the content for this event if it is not redacted, or `None` if it is.
 | ||||||
|  |             pub fn original_content(&self) -> Option<#content_enum> { | ||||||
|  |                 match self { | ||||||
|  |                     #( | ||||||
|  |                         #self_variants(event) => { | ||||||
|  |                             event.as_original().map(|ev| #content_variants(ev.content.clone())) | ||||||
|  |                         } | ||||||
|  |                     )* | ||||||
|  |                     Self::_Custom(event) => event.as_original().map(|ev| { | ||||||
|  |                         #content_enum::_Custom { | ||||||
|  |                             event_type: crate::PrivOwnedStr( | ||||||
|  |                                 ::std::convert::From::from( | ||||||
|  |                                     ::std::string::ToString::to_string( | ||||||
|  |                                         &#ruma_common::events::EventContent::event_type( | ||||||
|  |                                             &ev.content, | ||||||
|  |                                         ), | ||||||
|  |                                     ), | ||||||
|  |                                 ), | ||||||
|  |                             ), | ||||||
|  |                         } | ||||||
|  |                     }), | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|         quote! { |         quote! { | ||||||
|             /// Returns the content for this event.
 |             /// Returns the content for this event.
 | ||||||
|             pub fn content(&self) -> #content_enum { |             pub fn content(&self) -> #content_enum { | ||||||
| @ -461,7 +486,7 @@ fn expand_accessor_methods( | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }; | ||||||
| 
 | 
 | ||||||
|     let methods = EVENT_FIELDS.iter().map(|(name, has_field)| { |     let methods = EVENT_FIELDS.iter().map(|(name, has_field)| { | ||||||
|         has_field(kind, var).then(|| { |         has_field(kind, var).then(|| { | ||||||
| @ -526,7 +551,7 @@ fn expand_accessor_methods( | |||||||
|                 match self { #event_type_match_arms } |                 match self { #event_type_match_arms } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             #content_accessors |             #content_accessor | ||||||
|             #( #methods )* |             #( #methods )* | ||||||
|             #state_key_accessor |             #state_key_accessor | ||||||
|             #txn_id_accessor |             #txn_id_accessor | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user