events: Expand trait_aliases! macro

This commit is contained in:
Jonas Platte 2022-09-05 10:35:09 +02:00
parent 6393433882
commit 2579544883
No known key found for this signature in database
GPG Key ID: 7D261D771D915378

View File

@ -136,43 +136,36 @@ pub enum EventKind {
Presence, Presence,
} }
macro_rules! trait_aliases { /// An alias for `EventContent<EventType = GlobalAccountDataEventType>`.
// need to use `,` instead of `+` because (1) path can't be followed by `+` pub trait GlobalAccountDataEventContent:
// and (2) `+` can't be used as a separator since it's a repetition operator EventContent<EventType = GlobalAccountDataEventType>
($( {
$( #[doc = $docs:literal] )*
trait $id:ident = $( $def:path ),+;
)*) => {
$(
$( #[doc = $docs] )*
pub trait $id: $($def+)+ {}
impl<T: $($def+)+> $id for T {}
)*
}
} }
impl<T: EventContent<EventType = GlobalAccountDataEventType>> GlobalAccountDataEventContent for T {}
trait_aliases! { /// An alias for `EventContent<EventType = RoomAccountDataEventType>`.
/// An alias for `EventContent<EventType = GlobalAccountDataEventType>`. pub trait RoomAccountDataEventContent: EventContent<EventType = RoomAccountDataEventType> {}
trait GlobalAccountDataEventContent = EventContent<EventType = GlobalAccountDataEventType>; impl<T: EventContent<EventType = RoomAccountDataEventType>> RoomAccountDataEventContent for T {}
/// An alias for `EventContent<EventType = RoomAccountDataEventType>`. /// An alias for `EventContent<EventType = EphemeralRoomEventType>`.
trait RoomAccountDataEventContent = EventContent<EventType = RoomAccountDataEventType>; pub trait EphemeralRoomEventContent: EventContent<EventType = EphemeralRoomEventType> {}
impl<T: EventContent<EventType = EphemeralRoomEventType>> EphemeralRoomEventContent for T {}
/// An alias for `EventContent<EventType = EphemeralRoomEventType>`. /// An alias for `EventContent<EventType = MessageLikeEventType>`.
trait EphemeralRoomEventContent = EventContent<EventType = EphemeralRoomEventType>; pub trait MessageLikeEventContent: EventContent<EventType = MessageLikeEventType> {}
impl<T: EventContent<EventType = MessageLikeEventType>> MessageLikeEventContent for T {}
/// An alias for `EventContent<EventType = MessageLikeEventType>`. /// An alias for `MessageLikeEventContent + RedactedEventContent`.
trait MessageLikeEventContent = EventContent<EventType = MessageLikeEventType>; pub trait RedactedMessageLikeEventContent: MessageLikeEventContent + RedactedEventContent {}
impl<T: MessageLikeEventContent + RedactedEventContent> RedactedMessageLikeEventContent for T {}
/// An alias for `MessageLikeEventContent + RedactedEventContent`. /// An alias for `StateEventContent + RedactedEventContent`.
trait RedactedMessageLikeEventContent = MessageLikeEventContent, RedactedEventContent; pub trait RedactedStateEventContent: StateEventContent + RedactedEventContent {}
impl<T: StateEventContent + RedactedEventContent> RedactedStateEventContent for T {}
/// An alias for `StateEventContent + RedactedEventContent`. /// An alias for `EventContent<EventType = ToDeviceEventType>`.
trait RedactedStateEventContent = StateEventContent, RedactedEventContent; pub trait ToDeviceEventContent: EventContent<EventType = ToDeviceEventType> {}
impl<T: EventContent<EventType = ToDeviceEventType>> ToDeviceEventContent for T {}
/// An alias for `EventContent<EventType = ToDeviceEventType>`.
trait ToDeviceEventContent = EventContent<EventType = ToDeviceEventType>;
}
/// An alias for `EventContent<EventType = StateEventType>`. /// An alias for `EventContent<EventType = StateEventType>`.
pub trait StateEventContent: EventContent<EventType = StateEventType> { pub trait StateEventContent: EventContent<EventType = StateEventType> {