events: Use CanBeEmpty trait for skipping unsigned serialization
This commit is contained in:
		
							parent
							
								
									24d0b2e2bb
								
							
						
					
					
						commit
						674137c41d
					
				| @ -460,8 +460,8 @@ mod tests { | ||||
| 
 | ||||
|     use super::{MembershipState, RoomMemberEventContent}; | ||||
|     use crate::{ | ||||
|         events::OriginalStateEvent, mxc_uri, server_name, server_signing_key_id, user_id, | ||||
|         MilliSecondsSinceUnixEpoch, | ||||
|         events::OriginalStateEvent, mxc_uri, serde::CanBeEmpty, server_name, server_signing_key_id, | ||||
|         user_id, MilliSecondsSinceUnixEpoch, | ||||
|     }; | ||||
| 
 | ||||
|     #[test] | ||||
|  | ||||
| @ -3,7 +3,10 @@ use serde::{Deserialize, Serialize}; | ||||
| use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue}; | ||||
| 
 | ||||
| use super::{relation::Relations, room::redaction::SyncRoomRedactionEvent, StateEventContent}; | ||||
| use crate::{serde::Raw, OwnedTransactionId}; | ||||
| use crate::{ | ||||
|     serde::{CanBeEmpty, Raw}, | ||||
|     OwnedTransactionId, | ||||
| }; | ||||
| 
 | ||||
| /// Extra information about a message event that is not incorporated into the event's hash.
 | ||||
| #[derive(Clone, Debug, Default, Deserialize, Serialize)] | ||||
| @ -34,13 +37,15 @@ impl MessageLikeUnsigned { | ||||
|     pub fn new() -> Self { | ||||
|         Self::default() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl CanBeEmpty for MessageLikeUnsigned { | ||||
|     /// Whether this unsigned data is empty (all fields are `None`).
 | ||||
|     ///
 | ||||
|     /// This method is used to determine whether to skip serializing the `unsigned` field in room
 | ||||
|     /// events. Do not use it to determine whether an incoming `unsigned` field was present - it
 | ||||
|     /// could still have been present but contained none of the known fields.
 | ||||
|     pub fn is_empty(&self) -> bool { | ||||
|     fn is_empty(&self) -> bool { | ||||
|         self.age.is_none() && self.transaction_id.is_none() && self.relations.is_none() | ||||
|     } | ||||
| } | ||||
| @ -78,13 +83,15 @@ impl<C: StateEventContent> StateUnsigned<C> { | ||||
|     pub fn new() -> Self { | ||||
|         Self { age: None, transaction_id: None, prev_content: None, relations: None } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<C: StateEventContent> CanBeEmpty for StateUnsigned<C> { | ||||
|     /// Whether this unsigned data is empty (all fields are `None`).
 | ||||
|     ///
 | ||||
|     /// This method is used to determine whether to skip serializing the `unsigned` field in room
 | ||||
|     /// events. Do not use it to determine whether an incoming `unsigned` field was present - it
 | ||||
|     /// could still have been present but contained none of the known fields.
 | ||||
|     pub fn is_empty(&self) -> bool { | ||||
|     fn is_empty(&self) -> bool { | ||||
|         self.age.is_none() | ||||
|             && self.transaction_id.is_none() | ||||
|             && self.prev_content.is_none() | ||||
| @ -160,13 +167,15 @@ impl RedactedUnsigned { | ||||
|     pub fn new_because(redacted_because: Box<SyncRoomRedactionEvent>) -> Self { | ||||
|         Self { redacted_because: Some(redacted_because) } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl CanBeEmpty for RedactedUnsigned { | ||||
|     /// Whether this unsigned data is empty (`redacted_because` is `None`).
 | ||||
|     ///
 | ||||
|     /// This method is used to determine whether to skip serializing the `unsigned` field in
 | ||||
|     /// redacted room events. Do not use it to determine whether an incoming `unsigned` field
 | ||||
|     /// was present - it could still have been present but contained none of the known fields.
 | ||||
|     pub fn is_empty(&self) -> bool { | ||||
|     fn is_empty(&self) -> bool { | ||||
|         self.redacted_because.is_none() | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -20,7 +20,7 @@ use ruma_common::{ | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, | ||||
|     serde::Base64, | ||||
|     serde::{Base64, CanBeEmpty}, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
|  | ||||
| @ -2,6 +2,7 @@ use assert_matches::assert_matches; | ||||
| use js_int::uint; | ||||
| use ruma_common::{ | ||||
|     events::{AnyMessageLikeEvent, MessageLikeEvent}, | ||||
|     serde::CanBeEmpty, | ||||
|     MilliSecondsSinceUnixEpoch, VoipVersionId, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json}; | ||||
|  | ||||
| @ -17,7 +17,7 @@ use ruma_common::{ | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, | ||||
|     serde::Base64, | ||||
|     serde::{Base64, CanBeEmpty}, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
|  | ||||
| @ -21,7 +21,7 @@ use ruma_common::{ | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, | ||||
|     serde::Base64, | ||||
|     serde::{Base64, CanBeEmpty}, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
|  | ||||
| @ -13,7 +13,9 @@ use ruma_common::{ | ||||
|         }, | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     room_id, user_id, MilliSecondsSinceUnixEpoch, | ||||
|     room_id, | ||||
|     serde::CanBeEmpty, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
| 
 | ||||
|  | ||||
| @ -14,7 +14,9 @@ use ruma_common::{ | ||||
|         }, | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     room_id, user_id, MilliSecondsSinceUnixEpoch, | ||||
|     room_id, | ||||
|     serde::CanBeEmpty, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
| 
 | ||||
|  | ||||
| @ -10,7 +10,7 @@ use ruma_common::{ | ||||
|         MessageLikeEventType, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, | ||||
|     serde::Raw, | ||||
|     serde::{CanBeEmpty, Raw}, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, VoipVersionId, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
|  | ||||
| @ -8,7 +8,9 @@ use ruma_common::{ | ||||
|         }, | ||||
|         AnyMessageLikeEvent, MessageLikeUnsigned, | ||||
|     }, | ||||
|     room_id, user_id, MilliSecondsSinceUnixEpoch, | ||||
|     room_id, | ||||
|     serde::CanBeEmpty, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{ | ||||
|     from_value as from_json_value, json, to_value as to_json_value, Value as JsonValue, | ||||
|  | ||||
| @ -9,7 +9,7 @@ use ruma_common::{ | ||||
|         StateUnsigned, SyncStateEvent, | ||||
|     }, | ||||
|     mxc_uri, room_alias_id, room_id, | ||||
|     serde::Raw, | ||||
|     serde::{CanBeEmpty, Raw}, | ||||
|     server_name, user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{ | ||||
|  | ||||
| @ -21,7 +21,7 @@ use ruma_common::{ | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, | ||||
|     serde::Base64, | ||||
|     serde::{Base64, CanBeEmpty}, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
|  | ||||
| @ -19,7 +19,9 @@ use ruma_common::{ | ||||
|         voice::{VoiceContent, VoiceEventContent}, | ||||
|         AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent, | ||||
|     }, | ||||
|     mxc_uri, room_id, user_id, MilliSecondsSinceUnixEpoch, | ||||
|     mxc_uri, room_id, | ||||
|     serde::CanBeEmpty, | ||||
|     user_id, MilliSecondsSinceUnixEpoch, | ||||
| }; | ||||
| use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; | ||||
| 
 | ||||
|  | ||||
| @ -86,7 +86,7 @@ fn expand_serialize_event( | ||||
|                 } | ||||
|             } else if name == "unsigned" { | ||||
|                 quote! { | ||||
|                     if !self.unsigned.is_empty() { | ||||
|                     if !#ruma_common::serde::is_empty(&self.unsigned) { | ||||
|                         state.serialize_field("unsigned", &self.unsigned)?; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user