events: Reintroduce *EventContent as trait aliases
This commit is contained in:
		
							parent
							
								
									9f56e6e497
								
							
						
					
					
						commit
						5ec3ad2290
					
				| @ -7,7 +7,10 @@ pub mod v3 { | |||||||
| 
 | 
 | ||||||
|     use ruma_common::{ |     use ruma_common::{ | ||||||
|         api::ruma_api, |         api::ruma_api, | ||||||
|         events::{AnyGlobalAccountDataEventContent, EventContent, GlobalAccountDataEventType}, |         events::{ | ||||||
|  |             AnyGlobalAccountDataEventContent, GlobalAccountDataEventContent, | ||||||
|  |             GlobalAccountDataEventType, | ||||||
|  |         }, | ||||||
|         serde::Raw, |         serde::Raw, | ||||||
|         UserId, |         UserId, | ||||||
|     }; |     }; | ||||||
| @ -60,7 +63,7 @@ pub mod v3 { | |||||||
|         /// `T`s [`Serialize`][serde::Serialize] implementation can fail.
 |         /// `T`s [`Serialize`][serde::Serialize] implementation can fail.
 | ||||||
|         pub fn new<T>(data: &'a T, user_id: &'a UserId) -> serde_json::Result<Self> |         pub fn new<T>(data: &'a T, user_id: &'a UserId) -> serde_json::Result<Self> | ||||||
|         where |         where | ||||||
|             T: EventContent<EventType = GlobalAccountDataEventType>, |             T: GlobalAccountDataEventContent, | ||||||
|         { |         { | ||||||
|             Ok(Self { |             Ok(Self { | ||||||
|                 user_id, |                 user_id, | ||||||
|  | |||||||
| @ -7,7 +7,9 @@ pub mod v3 { | |||||||
| 
 | 
 | ||||||
|     use ruma_common::{ |     use ruma_common::{ | ||||||
|         api::ruma_api, |         api::ruma_api, | ||||||
|         events::{AnyRoomAccountDataEventContent, EventContent, RoomAccountDataEventType}, |         events::{ | ||||||
|  |             AnyRoomAccountDataEventContent, RoomAccountDataEventContent, RoomAccountDataEventType, | ||||||
|  |         }, | ||||||
|         serde::Raw, |         serde::Raw, | ||||||
|         RoomId, UserId, |         RoomId, UserId, | ||||||
|     }; |     }; | ||||||
| @ -68,7 +70,7 @@ pub mod v3 { | |||||||
|             user_id: &'a UserId, |             user_id: &'a UserId, | ||||||
|         ) -> serde_json::Result<Self> |         ) -> serde_json::Result<Self> | ||||||
|         where |         where | ||||||
|             T: EventContent<EventType = RoomAccountDataEventType>, |             T: RoomAccountDataEventContent, | ||||||
|         { |         { | ||||||
|             Ok(Self { |             Ok(Self { | ||||||
|                 data: Raw::from_json(to_raw_json_value(data)?), |                 data: Raw::from_json(to_raw_json_value(data)?), | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ pub mod v3 { | |||||||
| 
 | 
 | ||||||
|     use ruma_common::{ |     use ruma_common::{ | ||||||
|         api::ruma_api, |         api::ruma_api, | ||||||
|         events::{AnyMessageLikeEventContent, EventContent, MessageLikeEventType}, |         events::{AnyMessageLikeEventContent, MessageLikeEventContent, MessageLikeEventType}, | ||||||
|         serde::Raw, |         serde::Raw, | ||||||
|         EventId, RoomId, TransactionId, |         EventId, RoomId, TransactionId, | ||||||
|     }; |     }; | ||||||
| @ -68,7 +68,7 @@ pub mod v3 { | |||||||
|             content: &'a T, |             content: &'a T, | ||||||
|         ) -> serde_json::Result<Self> |         ) -> serde_json::Result<Self> | ||||||
|         where |         where | ||||||
|             T: EventContent<EventType = MessageLikeEventType>, |             T: MessageLikeEventContent, | ||||||
|         { |         { | ||||||
|             Ok(Self { |             Ok(Self { | ||||||
|                 room_id, |                 room_id, | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ pub mod v3 { | |||||||
| 
 | 
 | ||||||
|     use ruma_common::{ |     use ruma_common::{ | ||||||
|         api::ruma_api, |         api::ruma_api, | ||||||
|         events::{AnyStateEventContent, EventContent, StateEventType}, |         events::{AnyStateEventContent, StateEventContent, StateEventType}, | ||||||
|         serde::{Incoming, Raw}, |         serde::{Incoming, Raw}, | ||||||
|         EventId, RoomId, |         EventId, RoomId, | ||||||
|     }; |     }; | ||||||
| @ -66,7 +66,7 @@ pub mod v3 { | |||||||
|             content: &'a T, |             content: &'a T, | ||||||
|         ) -> serde_json::Result<Self> |         ) -> serde_json::Result<Self> | ||||||
|         where |         where | ||||||
|             T: EventContent<EventType = StateEventType>, |             T: StateEventContent, | ||||||
|         { |         { | ||||||
|             Ok(Self { |             Ok(Self { | ||||||
|                 room_id, |                 room_id, | ||||||
|  | |||||||
| @ -5,6 +5,11 @@ use serde_json::value::RawValue as RawJsonValue; | |||||||
| 
 | 
 | ||||||
| use crate::serde::Raw; | use crate::serde::Raw; | ||||||
| 
 | 
 | ||||||
|  | use super::{ | ||||||
|  |     EphemeralRoomEventType, GlobalAccountDataEventType, MessageLikeEventType, | ||||||
|  |     RoomAccountDataEventType, StateEventType, ToDeviceEventType, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /// The base trait that all event content types implement.
 | /// The base trait that all event content types implement.
 | ||||||
| ///
 | ///
 | ||||||
| /// Use [`macros::EventContent`] to derive this traits. It is not meant to be implemented manually.
 | /// Use [`macros::EventContent`] to derive this traits. It is not meant to be implemented manually.
 | ||||||
| @ -128,3 +133,46 @@ pub enum EventKind { | |||||||
|     /// Presence event kind.
 |     /// Presence event kind.
 | ||||||
|     Presence, |     Presence, | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | macro_rules! trait_aliases { | ||||||
|  |     // need to use `,` instead of `+` because (1) path can't be followed by `+`
 | ||||||
|  |     // and (2) `+` can't be used as a separator since it's a repetition operator
 | ||||||
|  |     ($( | ||||||
|  |         $( #[doc = $docs:literal] )* | ||||||
|  |         trait $id:ident = $( $def:path ),+; | ||||||
|  |     )*) => { | ||||||
|  |         $( | ||||||
|  |             $( #[doc = $docs] )* | ||||||
|  |             pub trait $id: $($def+)+ {} | ||||||
|  |             impl<T: $($def+)+> $id for T {} | ||||||
|  |         )* | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | trait_aliases! { | ||||||
|  |     /// An alias for `EventContent<EventType = GlobalAccountDataEventType>`.
 | ||||||
|  |     trait GlobalAccountDataEventContent = EventContent<EventType = GlobalAccountDataEventType>; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = RoomAccountDataEventType>`.
 | ||||||
|  |     trait RoomAccountDataEventContent = EventContent<EventType = RoomAccountDataEventType>; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = EphemeralRoomEventType>`.
 | ||||||
|  |     trait EphemeralRoomEventContent = EventContent<EventType = EphemeralRoomEventType>; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = MessageLikeEventType>`.
 | ||||||
|  |     trait MessageLikeEventContent = EventContent<EventType = MessageLikeEventType>; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = MessageLikeEventType> + RedactedEventContent`.
 | ||||||
|  |     trait RedactedMessageLikeEventContent = | ||||||
|  |         EventContent<EventType = MessageLikeEventType>, RedactedEventContent; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = StateEventType>`.
 | ||||||
|  |     trait StateEventContent = EventContent<EventType = StateEventType>; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = StateEventType> + RedactedEventContent`.
 | ||||||
|  |     trait RedactedStateEventContent = | ||||||
|  |         EventContent<EventType = StateEventType>, RedactedEventContent; | ||||||
|  | 
 | ||||||
|  |     /// An alias for `EventContent<EventType = ToDeviceEventType>`.
 | ||||||
|  |     trait ToDeviceEventContent = EventContent<EventType = ToDeviceEventType>; | ||||||
|  | } | ||||||
|  | |||||||
| @ -4,29 +4,30 @@ use ruma_macros::Event; | |||||||
| use serde::{Deserialize, Serialize}; | use serde::{Deserialize, Serialize}; | ||||||
| 
 | 
 | ||||||
| use super::{ | use super::{ | ||||||
|     EphemeralRoomEventType, EventContent, GlobalAccountDataEventType, MessageLikeEventType, |     EphemeralRoomEventContent, GlobalAccountDataEventContent, MessageLikeEventContent, | ||||||
|     MessageLikeUnsigned, RedactedEventContent, RedactedUnsigned, RoomAccountDataEventType, |     MessageLikeEventType, MessageLikeUnsigned, RedactedMessageLikeEventContent, | ||||||
|     StateEventType, StateUnsigned, ToDeviceEventType, |     RedactedStateEventContent, RedactedUnsigned, RoomAccountDataEventContent, StateEventContent, | ||||||
|  |     StateEventType, StateUnsigned, ToDeviceEventContent, | ||||||
| }; | }; | ||||||
| use crate::{EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId}; | use crate::{EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId}; | ||||||
| 
 | 
 | ||||||
| /// A global account data event.
 | /// A global account data event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct GlobalAccountDataEvent<C: EventContent<EventType = GlobalAccountDataEventType>> { | pub struct GlobalAccountDataEvent<C: GlobalAccountDataEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// A room account data event.
 | /// A room account data event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct RoomAccountDataEvent<C: EventContent<EventType = RoomAccountDataEventType>> { | pub struct RoomAccountDataEvent<C: RoomAccountDataEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// An ephemeral room event.
 | /// An ephemeral room event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct EphemeralRoomEvent<C: EventContent<EventType = EphemeralRoomEventType>> { | pub struct EphemeralRoomEvent<C: EphemeralRoomEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -36,7 +37,7 @@ pub struct EphemeralRoomEvent<C: EventContent<EventType = EphemeralRoomEventType | |||||||
| 
 | 
 | ||||||
| /// An ephemeral room event without a `room_id`.
 | /// An ephemeral room event without a `room_id`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct SyncEphemeralRoomEvent<C: EventContent<EventType = EphemeralRoomEventType>> { | pub struct SyncEphemeralRoomEvent<C: EphemeralRoomEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| } | } | ||||||
| @ -46,7 +47,7 @@ pub struct SyncEphemeralRoomEvent<C: EventContent<EventType = EphemeralRoomEvent | |||||||
| /// `MessageLikeEvent` implements the comparison traits using only the `event_id` field, a sorted
 | /// `MessageLikeEvent` implements the comparison traits using only the `event_id` field, a sorted
 | ||||||
| /// list would be sorted lexicographically based on the event's `EventId`.
 | /// list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct MessageLikeEvent<C: EventContent<EventType = MessageLikeEventType>> { | pub struct MessageLikeEvent<C: MessageLikeEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -71,7 +72,7 @@ pub struct MessageLikeEvent<C: EventContent<EventType = MessageLikeEventType>> { | |||||||
| /// `SyncMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
 | /// `SyncMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
 | ||||||
| /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct SyncMessageLikeEvent<C: EventContent<EventType = MessageLikeEventType>> { | pub struct SyncMessageLikeEvent<C: MessageLikeEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -93,9 +94,7 @@ pub struct SyncMessageLikeEvent<C: EventContent<EventType = MessageLikeEventType | |||||||
| /// `RedactedMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
 | /// `RedactedMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
 | ||||||
| /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct RedactedMessageLikeEvent< | pub struct RedactedMessageLikeEvent<C: RedactedMessageLikeEventContent> { | ||||||
|     C: EventContent<EventType = MessageLikeEventType> + RedactedEventContent, |  | ||||||
| > { |  | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -120,9 +119,7 @@ pub struct RedactedMessageLikeEvent< | |||||||
| /// `RedactedSyncMessageLikeEvent` implements the comparison traits using only the `event_id` field,
 | /// `RedactedSyncMessageLikeEvent` implements the comparison traits using only the `event_id` field,
 | ||||||
| /// a sorted list would be sorted lexicographically based on the event's `EventId`.
 | /// a sorted list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct RedactedSyncMessageLikeEvent< | pub struct RedactedSyncMessageLikeEvent<C: RedactedMessageLikeEventContent> { | ||||||
|     C: EventContent<EventType = MessageLikeEventType> + RedactedEventContent, |  | ||||||
| > { |  | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -144,7 +141,7 @@ pub struct RedactedSyncMessageLikeEvent< | |||||||
| /// `StateEvent` implements the comparison traits using only the `event_id` field, a sorted list
 | /// `StateEvent` implements the comparison traits using only the `event_id` field, a sorted list
 | ||||||
| /// would be sorted lexicographically based on the event's `EventId`.
 | /// would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct StateEvent<C: EventContent<EventType = StateEventType>> { | pub struct StateEvent<C: StateEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -175,7 +172,7 @@ pub struct StateEvent<C: EventContent<EventType = StateEventType>> { | |||||||
| /// `SyncStateEvent` implements the comparison traits using only the `event_id` field, a sorted list
 | /// `SyncStateEvent` implements the comparison traits using only the `event_id` field, a sorted list
 | ||||||
| /// would be sorted lexicographically based on the event's `EventId`.
 | /// would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct SyncStateEvent<C: EventContent<EventType = StateEventType>> { | pub struct SyncStateEvent<C: StateEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -200,7 +197,7 @@ pub struct SyncStateEvent<C: EventContent<EventType = StateEventType>> { | |||||||
| 
 | 
 | ||||||
| /// A stripped-down state event, used for previews of rooms the user has been invited to.
 | /// A stripped-down state event, used for previews of rooms the user has been invited to.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct StrippedStateEvent<C: EventContent<EventType = StateEventType>> { | pub struct StrippedStateEvent<C: StateEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -216,7 +213,7 @@ pub struct StrippedStateEvent<C: EventContent<EventType = StateEventType>> { | |||||||
| 
 | 
 | ||||||
| /// A minimal state event, used for creating a new room.
 | /// A minimal state event, used for creating a new room.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct InitialStateEvent<C: EventContent<EventType = StateEventType>> { | pub struct InitialStateEvent<C: StateEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -235,7 +232,7 @@ pub struct InitialStateEvent<C: EventContent<EventType = StateEventType>> { | |||||||
| /// `RedactedStateEvent` implements the comparison traits using only the `event_id` field, a sorted
 | /// `RedactedStateEvent` implements the comparison traits using only the `event_id` field, a sorted
 | ||||||
| /// list would be sorted lexicographically based on the event's `EventId`.
 | /// list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct RedactedStateEvent<C: EventContent<EventType = StateEventType> + RedactedEventContent> { | pub struct RedactedStateEvent<C: RedactedStateEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -266,9 +263,7 @@ pub struct RedactedStateEvent<C: EventContent<EventType = StateEventType> + Reda | |||||||
| /// `RedactedSyncStateEvent` implements the comparison traits using only the `event_id` field, a
 | /// `RedactedSyncStateEvent` implements the comparison traits using only the `event_id` field, a
 | ||||||
| /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | /// sorted list would be sorted lexicographically based on the event's `EventId`.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct RedactedSyncStateEvent< | pub struct RedactedSyncStateEvent<C: RedactedStateEventContent> { | ||||||
|     C: EventContent<EventType = StateEventType> + RedactedEventContent, |  | ||||||
| > { |  | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -293,7 +288,7 @@ pub struct RedactedSyncStateEvent< | |||||||
| 
 | 
 | ||||||
| /// An event sent using send-to-device messaging.
 | /// An event sent using send-to-device messaging.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct ToDeviceEvent<C: EventContent<EventType = ToDeviceEventType>> { | pub struct ToDeviceEvent<C: ToDeviceEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -303,7 +298,7 @@ pub struct ToDeviceEvent<C: EventContent<EventType = ToDeviceEventType>> { | |||||||
| 
 | 
 | ||||||
| /// The decrypted payload of an `m.olm.v1.curve25519-aes-sha2` event.
 | /// The decrypted payload of an `m.olm.v1.curve25519-aes-sha2` event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct DecryptedOlmV1Event<C: EventContent<EventType = MessageLikeEventType>> { | pub struct DecryptedOlmV1Event<C: MessageLikeEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
| @ -329,7 +324,7 @@ pub struct OlmV1Keys { | |||||||
| 
 | 
 | ||||||
| /// The decrypted payload of an `m.megolm.v1.aes-sha2` event.
 | /// The decrypted payload of an `m.megolm.v1.aes-sha2` event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct DecryptedMegolmV1Event<C: EventContent<EventType = MessageLikeEventType>> { | pub struct DecryptedMegolmV1Event<C: MessageLikeEventContent> { | ||||||
|     /// Data specific to the event type.
 |     /// Data specific to the event type.
 | ||||||
|     pub content: C, |     pub content: C, | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue}; | |||||||
| 
 | 
 | ||||||
| #[cfg(feature = "unstable-msc2675")] | #[cfg(feature = "unstable-msc2675")] | ||||||
| use super::relation::Relations; | use super::relation::Relations; | ||||||
| use super::{room::redaction::SyncRoomRedactionEvent, EventContent, StateEventType}; | use super::{room::redaction::SyncRoomRedactionEvent, StateEventContent}; | ||||||
| use crate::{serde::Raw, TransactionId}; | use crate::{serde::Raw, TransactionId}; | ||||||
| 
 | 
 | ||||||
| /// 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.
 | ||||||
| @ -57,7 +57,7 @@ impl MessageLikeUnsigned { | |||||||
| /// Extra information about a state event that is not incorporated into the event's hash.
 | /// Extra information about a state event that is not incorporated into the event's hash.
 | ||||||
| #[derive(Clone, Debug, Deserialize, Serialize)] | #[derive(Clone, Debug, Deserialize, Serialize)] | ||||||
| #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | ||||||
| pub struct StateUnsigned<C: EventContent<EventType = StateEventType>> { | pub struct StateUnsigned<C: StateEventContent> { | ||||||
|     /// The time in milliseconds that has elapsed since the event was sent.
 |     /// The time in milliseconds that has elapsed since the event was sent.
 | ||||||
|     ///
 |     ///
 | ||||||
|     /// This field is generated by the local homeserver, and may be incorrect if the local time on
 |     /// This field is generated by the local homeserver, and may be incorrect if the local time on
 | ||||||
| @ -81,7 +81,7 @@ pub struct StateUnsigned<C: EventContent<EventType = StateEventType>> { | |||||||
|     pub relations: Option<Relations>, |     pub relations: Option<Relations>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl<C: EventContent<EventType = StateEventType>> StateUnsigned<C> { | impl<C: StateEventContent> StateUnsigned<C> { | ||||||
|     /// Create a new `Unsigned` with fields set to `None`.
 |     /// Create a new `Unsigned` with fields set to `None`.
 | ||||||
|     pub fn new() -> Self { |     pub fn new() -> Self { | ||||||
|         Self { |         Self { | ||||||
| @ -118,7 +118,7 @@ impl<C: EventContent<EventType = StateEventType>> StateUnsigned<C> { | |||||||
| ///
 | ///
 | ||||||
| /// Needs to be public for UI tests.
 | /// Needs to be public for UI tests.
 | ||||||
| #[doc(hidden)] | #[doc(hidden)] | ||||||
| impl<C: EventContent<EventType = StateEventType>> StateUnsigned<C> { | impl<C: StateEventContent> StateUnsigned<C> { | ||||||
|     pub fn _from_parts(event_type: &str, object: &RawJsonValue) -> serde_json::Result<Self> { |     pub fn _from_parts(event_type: &str, object: &RawJsonValue) -> serde_json::Result<Self> { | ||||||
|         #[derive(Deserialize)] |         #[derive(Deserialize)] | ||||||
|         #[serde(bound = "")] // Disable default C: Deserialize bound
 |         #[serde(bound = "")] // Disable default C: Deserialize bound
 | ||||||
| @ -148,7 +148,7 @@ impl<C: EventContent<EventType = StateEventType>> StateUnsigned<C> { | |||||||
| 
 | 
 | ||||||
|     pub fn _map_prev_unsigned<T>(&self, f: impl FnOnce(&C) -> T) -> StateUnsigned<T> |     pub fn _map_prev_unsigned<T>(&self, f: impl FnOnce(&C) -> T) -> StateUnsigned<T> | ||||||
|     where |     where | ||||||
|         T: EventContent<EventType = StateEventType>, |         T: StateEventContent, | ||||||
|     { |     { | ||||||
|         StateUnsigned { |         StateUnsigned { | ||||||
|             age: self.age, |             age: self.age, | ||||||
| @ -160,7 +160,7 @@ impl<C: EventContent<EventType = StateEventType>> StateUnsigned<C> { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl<C: EventContent<EventType = StateEventType>> Default for StateUnsigned<C> { | impl<C: StateEventContent> Default for StateUnsigned<C> { | ||||||
|     fn default() -> Self { |     fn default() -> Self { | ||||||
|         Self::new() |         Self::new() | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -4,14 +4,14 @@ | |||||||
| extern crate serde; | extern crate serde; | ||||||
| 
 | 
 | ||||||
| use ruma_common::{ | use ruma_common::{ | ||||||
|     events::{EventContent, StateEventType, StateUnsigned}, |     events::{StateEventContent, StateUnsigned}, | ||||||
|     EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId, |     EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId, | ||||||
| }; | }; | ||||||
| use ruma_macros::Event; | use ruma_macros::Event; | ||||||
| 
 | 
 | ||||||
| /// State event.
 | /// State event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct StateEvent<C: EventContent<EventType = StateEventType>> { | pub struct StateEvent<C: StateEventContent> { | ||||||
|     pub content: C, |     pub content: C, | ||||||
|     pub event_id: Box<EventId>, |     pub event_id: Box<EventId>, | ||||||
|     pub sender: Box<UserId>, |     pub sender: Box<UserId>, | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| use ruma_common::events::{EventContent, StateEventType}; | use ruma_common::events::StateEventContent; | ||||||
| use ruma_macros::Event; | use ruma_macros::Event; | ||||||
| 
 | 
 | ||||||
| /// State event.
 | /// State event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct StateEvent<C: EventContent<EventType = StateEventType>>(C); | pub struct StateEvent<C: StateEventContent>(C); | ||||||
| 
 | 
 | ||||||
| fn main() {} | fn main() {} | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| error: the `Event` derive only supports structs with named fields | error: the `Event` derive only supports structs with named fields | ||||||
|  --> tests/events/ui/05-named-fields.rs:6:12 |  --> tests/events/ui/05-named-fields.rs:6:12 | ||||||
|   | |   | | ||||||
| 6 | pub struct StateEvent<C: EventContent<EventType = StateEventType>>(C); | 6 | pub struct StateEvent<C: StateEventContent>(C); | ||||||
|   |            ^^^^^^^^^^ |   |            ^^^^^^^^^^ | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| use ruma_common::events::{EventContent, StateEventType}; | use ruma_common::events::StateEventContent; | ||||||
| use ruma_macros::Event; | use ruma_macros::Event; | ||||||
| 
 | 
 | ||||||
| /// State event.
 | /// State event.
 | ||||||
| #[derive(Clone, Debug, Event)] | #[derive(Clone, Debug, Event)] | ||||||
| pub struct StateEvent<C: EventContent<EventType = StateEventType>> { | pub struct StateEvent<C: StateEventContent> { | ||||||
|     pub not_content: C, |     pub not_content: C, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| error: struct must contain a `content` field | error: struct must contain a `content` field | ||||||
|  --> $DIR/06-no-content-field.rs:5:24 |  --> tests/events/ui/06-no-content-field.rs:5:24 | ||||||
|   | |   | | ||||||
| 5 | #[derive(Clone, Debug, Event)] | 5 | #[derive(Clone, Debug, Event)] | ||||||
|   |                        ^^^^^ |   |                        ^^^^^ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user