diff --git a/ruma-events-macros/src/event_enum.rs b/ruma-events-macros/src/event_enum.rs index 7f33b3dc..b47f48e8 100644 --- a/ruma-events-macros/src/event_enum.rs +++ b/ruma-events-macros/src/event_enum.rs @@ -711,6 +711,18 @@ fn accessor_methods( let self_variants: Vec<_> = variants.iter().map(|v| v.match_arm(quote!(Self))).collect(); let content_variants: Vec<_> = variants.iter().map(|v| v.ctor(&content_enum)).collect(); + let event_type = quote! { + /// Returns the `type` of this event. + pub fn event_type(&self) -> &str { + match self { + #( #self_variants(event) => + #ruma_events::EventContent::event_type(&event.content), )* + Self::Custom(event) => + #ruma_events::EventContent::event_type(&event.content), + } + } + }; + let content = quote! { /// Returns the any content enum for this event. pub fn content(&self) -> #content_enum { @@ -746,6 +758,8 @@ fn accessor_methods( impl #ident { #content + #event_type + #prev_content #( #methods )* diff --git a/ruma-events/tests/enums.rs b/ruma-events/tests/enums.rs index e4b71d4a..94ee7313 100644 --- a/ruma-events/tests/enums.rs +++ b/ruma-events/tests/enums.rs @@ -269,4 +269,5 @@ fn alias_event_field_access() { } else { panic!("the `Any*Event` enum's accessor methods may have been altered") } + assert_eq!(deser.event_type(), "m.room.aliases"); }