events: Create new type for redaction event inside redacted_because
This new types will deserialize fine regardless of whether the redaction event is itself redacted or not.
This commit is contained in:
		
							parent
							
								
									ad3c27d927
								
							
						
					
					
						commit
						2b69afeba7
					
				| @ -3,11 +3,11 @@ use serde::{Deserialize, Serialize}; | |||||||
| use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue}; | use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue}; | ||||||
| 
 | 
 | ||||||
| use super::{ | use super::{ | ||||||
|     relation::BundledRelations, room::redaction::SyncRoomRedactionEvent, StateEventContent, |     relation::BundledRelations, room::redaction::RoomRedactionEventContent, StateEventContent, | ||||||
| }; | }; | ||||||
| use crate::{ | use crate::{ | ||||||
|     serde::{CanBeEmpty, Raw}, |     serde::{CanBeEmpty, Raw}, | ||||||
|     OwnedTransactionId, |     MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedTransactionId, OwnedUserId, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// Extra information about a message event that is not incorporated into the event's hash.
 | /// Extra information about a message event that is not incorporated into the event's hash.
 | ||||||
| @ -147,12 +147,40 @@ impl<C: StateEventContent> Default for StateUnsigned<C> { | |||||||
| #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | ||||||
| pub struct RedactedUnsigned { | pub struct RedactedUnsigned { | ||||||
|     /// The event that redacted this event, if any.
 |     /// The event that redacted this event, if any.
 | ||||||
|     pub redacted_because: Box<SyncRoomRedactionEvent>, |     pub redacted_because: UnsignedRoomRedactionEvent, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl RedactedUnsigned { | impl RedactedUnsigned { | ||||||
|     /// Create a new `RedactedUnsigned` with the given redaction event.
 |     /// Create a new `RedactedUnsigned` with the given redaction event.
 | ||||||
|     pub fn new(redacted_because: Box<SyncRoomRedactionEvent>) -> Self { |     pub fn new(redacted_because: UnsignedRoomRedactionEvent) -> Self { | ||||||
|         Self { redacted_because } |         Self { redacted_because } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | /// A redaction event as found in `unsigned.redacted_because`.
 | ||||||
|  | ///
 | ||||||
|  | /// While servers usually send this with the `redacts` field (unless nested), the ID of the event
 | ||||||
|  | /// being redacted is known from context wherever this type is used, so it's not reflected as a
 | ||||||
|  | /// field here.
 | ||||||
|  | ///
 | ||||||
|  | /// It is intentionally not possible to create an instance of this type other than through `Clone`
 | ||||||
|  | /// or `Deserialize`.
 | ||||||
|  | #[derive(Clone, Debug, Deserialize)] | ||||||
|  | #[non_exhaustive] | ||||||
|  | pub struct UnsignedRoomRedactionEvent { | ||||||
|  |     /// Data specific to the event type.
 | ||||||
|  |     pub content: RoomRedactionEventContent, | ||||||
|  | 
 | ||||||
|  |     /// The globally unique event identifier for the user who sent the event.
 | ||||||
|  |     pub event_id: OwnedEventId, | ||||||
|  | 
 | ||||||
|  |     /// The fully-qualified ID of the user who sent this event.
 | ||||||
|  |     pub sender: OwnedUserId, | ||||||
|  | 
 | ||||||
|  |     /// Timestamp in milliseconds on originating homeserver when this event was sent.
 | ||||||
|  |     pub origin_server_ts: MilliSecondsSinceUnixEpoch, | ||||||
|  | 
 | ||||||
|  |     /// Additional key-value pairs not signed by the homeserver.
 | ||||||
|  |     #[serde(default)] | ||||||
|  |     pub unsigned: MessageLikeUnsigned, | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user