From a860fdaa869472dcabdc95c134efe6fb56623844 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 15 Mar 2022 15:33:29 +0100 Subject: [PATCH] macros: Allow variable event types in event_enum! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … the generated `*EventType`s aren't correct yet though. --- .../tests/events/ui/07-enum-sanity-check.rs | 3 ++- crates/ruma-macros/src/events/event_enum.rs | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/crates/ruma-common/tests/events/ui/07-enum-sanity-check.rs b/crates/ruma-common/tests/events/ui/07-enum-sanity-check.rs index 18658e67..78891007 100644 --- a/crates/ruma-common/tests/events/ui/07-enum-sanity-check.rs +++ b/crates/ruma-common/tests/events/ui/07-enum-sanity-check.rs @@ -6,7 +6,8 @@ event_enum! { "m.direct", #[cfg(test)] "m.ignored_user_list", - "m.push_rules", + // Doesn't actually have a wildcard, but this should work as a wildcard test + "m.push_rules.*", #[cfg(any())] "m.ruma_test", } diff --git a/crates/ruma-macros/src/events/event_enum.rs b/crates/ruma-macros/src/events/event_enum.rs index 14cce86c..abd85d11 100644 --- a/crates/ruma-macros/src/events/event_enum.rs +++ b/crates/ruma-macros/src/events/event_enum.rs @@ -525,9 +525,7 @@ fn to_event_path( var: EventKindVariation, ruma_common: &TokenStream, ) -> TokenStream { - let name_val = name.value(); - let path = name_val.strip_prefix("m.").unwrap().split('.').map(|s| Ident::new(s, name.span())); - + let path = event_module_path(name); let event = m_prefix_name_to_type_name(name).unwrap(); let event_name = if kind == EventKind::ToDevice { assert_eq!(var, EventKindVariation::Full); @@ -544,9 +542,7 @@ fn to_event_content_path( prefix: Option<&str>, ruma_common: &TokenStream, ) -> TokenStream { - let name_val = name.value(); - let path = name_val.strip_prefix("m.").unwrap().split('.').map(|s| Ident::new(s, name.span())); - + let path = event_module_path(name); let event = m_prefix_name_to_type_name(name).unwrap(); let content_str = match kind { EventKind::ToDevice => { @@ -560,6 +556,17 @@ fn to_event_content_path( } } +fn event_module_path(name: &LitStr) -> Vec { + let value = name.value(); + let value = value.strip_prefix("m.").unwrap(); + value + .strip_suffix(".*") + .unwrap_or(value) + .split('.') + .map(|s| Ident::new(s, name.span())) + .collect() +} + fn field_return_type( name: &str, var: EventKindVariation,