macros: Allow variable event types in event_enum!

… the generated `*EventType`s aren't correct yet though.
This commit is contained in:
Jonas Platte 2022-03-15 15:33:29 +01:00 committed by Jonas Platte
parent ef9c84716c
commit a860fdaa86
No known key found for this signature in database
GPG Key ID: 7D261D771D915378
2 changed files with 15 additions and 7 deletions

View File

@ -6,7 +6,8 @@ event_enum! {
"m.direct", "m.direct",
#[cfg(test)] #[cfg(test)]
"m.ignored_user_list", "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())] #[cfg(any())]
"m.ruma_test", "m.ruma_test",
} }

View File

@ -525,9 +525,7 @@ fn to_event_path(
var: EventKindVariation, var: EventKindVariation,
ruma_common: &TokenStream, ruma_common: &TokenStream,
) -> TokenStream { ) -> TokenStream {
let name_val = name.value(); let path = event_module_path(name);
let path = name_val.strip_prefix("m.").unwrap().split('.').map(|s| Ident::new(s, name.span()));
let event = m_prefix_name_to_type_name(name).unwrap(); let event = m_prefix_name_to_type_name(name).unwrap();
let event_name = if kind == EventKind::ToDevice { let event_name = if kind == EventKind::ToDevice {
assert_eq!(var, EventKindVariation::Full); assert_eq!(var, EventKindVariation::Full);
@ -544,9 +542,7 @@ fn to_event_content_path(
prefix: Option<&str>, prefix: Option<&str>,
ruma_common: &TokenStream, ruma_common: &TokenStream,
) -> TokenStream { ) -> TokenStream {
let name_val = name.value(); let path = event_module_path(name);
let path = name_val.strip_prefix("m.").unwrap().split('.').map(|s| Ident::new(s, name.span()));
let event = m_prefix_name_to_type_name(name).unwrap(); let event = m_prefix_name_to_type_name(name).unwrap();
let content_str = match kind { let content_str = match kind {
EventKind::ToDevice => { EventKind::ToDevice => {
@ -560,6 +556,17 @@ fn to_event_content_path(
} }
} }
fn event_module_path(name: &LitStr) -> Vec<Ident> {
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( fn field_return_type(
name: &str, name: &str,
var: EventKindVariation, var: EventKindVariation,