Make room_id optional
This field can be absent in some contextes, notably in the responses to the /sync endpoint, where the events are summarised in the initial sync of a client. Fixes #19
This commit is contained in:
		
							parent
							
								
									6240c25160
								
							
						
					
					
						commit
						e9fc9b03fd
					
				| @ -214,7 +214,10 @@ pub trait RoomEvent: Event { | ||||
|     fn origin_server_ts(&self) -> u64; | ||||
| 
 | ||||
|     /// The unique identifier for the room associated with this event.
 | ||||
|     fn room_id(&self) -> &RoomId; | ||||
|     ///
 | ||||
|     /// This can be `None` if the event came from a context where there is
 | ||||
|     /// no ambiguity which room it belongs to, like a `/sync` response for example.
 | ||||
|     fn room_id(&self) -> Option<&RoomId>; | ||||
| 
 | ||||
|     /// The unique identifier for the user who sent this event.
 | ||||
|     fn sender(&self) -> &UserId; | ||||
|  | ||||
| @ -94,7 +94,8 @@ macro_rules! room_event { | ||||
|             pub origin_server_ts: u64, | ||||
| 
 | ||||
|             /// The unique identifier for the room associated with this event.
 | ||||
|             pub room_id: ::ruma_identifiers::RoomId, | ||||
|             #[serde(skip_serializing_if="Option::is_none")] | ||||
|             pub room_id: Option<::ruma_identifiers::RoomId>, | ||||
| 
 | ||||
|             /// Additional key-value pairs not signed by the homeserver.
 | ||||
|             #[serde(skip_serializing_if="Option::is_none")] | ||||
| @ -126,8 +127,8 @@ macro_rules! impl_room_event { | ||||
|                 self.origin_server_ts | ||||
|             } | ||||
| 
 | ||||
|             fn room_id(&self) -> &::ruma_identifiers::RoomId { | ||||
|                 &self.room_id | ||||
|             fn room_id(&self) -> Option<&::ruma_identifiers::RoomId> { | ||||
|                 self.room_id.as_ref() | ||||
|             } | ||||
| 
 | ||||
|             fn unsigned(&self) -> Option<&::serde_json::Value> { | ||||
| @ -172,7 +173,8 @@ macro_rules! state_event { | ||||
|             pub prev_content: Option<$content_type>, | ||||
| 
 | ||||
|             /// The unique identifier for the room associated with this event.
 | ||||
|             pub room_id: ::ruma_identifiers::RoomId, | ||||
|             #[serde(skip_serializing_if="Option::is_none")] | ||||
|             pub room_id: Option<::ruma_identifiers::RoomId>, | ||||
| 
 | ||||
|             /// A key that determines which piece of room state the event represents.
 | ||||
|             pub state_key: String, | ||||
|  | ||||
| @ -8,7 +8,11 @@ event! { | ||||
|     /// Informs the client of new receipts.
 | ||||
|     pub struct ReceiptEvent(ReceiptEventContent) { | ||||
|         /// The unique identifier for the room associated with this event.
 | ||||
|         pub room_id: RoomId | ||||
|         ///
 | ||||
|         /// This can be `None` if the event came from a context where there is
 | ||||
|         /// no ambiguity which room it belongs to, like a `/sync` response for example.
 | ||||
|         #[serde(skip_serializing_if="Option::is_none")] | ||||
|         pub room_id: Option<RoomId> | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -38,7 +38,7 @@ mod tests { | ||||
|             event_type: EventType::RoomPinnedEvents, | ||||
|             origin_server_ts: 1432804485886, | ||||
|             prev_content: None, | ||||
|             room_id: RoomId::new("example.com").unwrap(), | ||||
|             room_id: Some(RoomId::new("example.com").unwrap()), | ||||
|             sender: UserId::new("example.com").unwrap(), | ||||
|             state_key: "".to_string(), | ||||
|             unsigned: None, | ||||
|  | ||||
| @ -6,7 +6,11 @@ event! { | ||||
|     /// Informs the client of the list of users currently typing.
 | ||||
|     pub struct TypingEvent(TypingEventContent) { | ||||
|         /// The unique identifier for the room associated with this event.
 | ||||
|         pub room_id: RoomId | ||||
|         ///
 | ||||
|         /// This can be `None` if the event came from a context where there is
 | ||||
|         /// no ambiguity which room it belongs to, like a `/sync` response for example.
 | ||||
|         #[serde(skip_serializing_if="Option::is_none")] | ||||
|         pub room_id: Option<RoomId> | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user