macros: Refactor event type to type name conversion

This commit is contained in:
Jonas Platte 2022-03-15 15:11:30 +01:00
parent 862ee426ab
commit 1b24a76967
No known key found for this signature in database
GPG Key ID: BBA95679259D342F
2 changed files with 11 additions and 33 deletions

View File

@ -508,21 +508,10 @@ fn to_event_path(
var: EventKindVariation,
ruma_common: &TokenStream,
) -> TokenStream {
let span = name.span();
let name = name.value();
// There is no need to give a good compiler error as `to_camel_case` is called first.
assert_eq!(&name[..2], "m.");
let path: Vec<_> = name[2..].split('.').collect();
let event: String = name[2..]
.split(&['.', '_'] as &[char])
.map(|s| s.chars().next().unwrap().to_uppercase().to_string() + &s[1..])
.collect();
let path = path.iter().map(|s| Ident::new(s, span));
let name_val = name.value();
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_name = if kind == EventKind::ToDevice {
assert_eq!(var, EventKindVariation::Full);
format_ident!("ToDevice{}Event", event)
@ -538,19 +527,10 @@ fn to_event_content_path(
prefix: Option<&str>,
ruma_common: &TokenStream,
) -> TokenStream {
let span = name.span();
let name = name.value();
// There is no need to give a good compiler error as `to_camel_case` is called first.
assert_eq!(&name[..2], "m.");
let path: Vec<_> = name[2..].split('.').collect();
let event: String = name[2..]
.split(&['.', '_'] as &[char])
.map(|s| s.chars().next().unwrap().to_uppercase().to_string() + &s[1..])
.collect();
let name_val = name.value();
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 content_str = match kind {
EventKind::ToDevice => {
format_ident!("ToDevice{}{}EventContent", prefix.unwrap_or(""), event)
@ -558,8 +538,6 @@ fn to_event_content_path(
_ => format_ident!("{}{}EventContent", prefix.unwrap_or(""), event),
};
let path = path.iter().map(|s| Ident::new(s, span));
quote! {
#ruma_common::events::#( #path )::*::#content_str
}

View File

@ -39,14 +39,14 @@ pub(crate) fn m_prefix_name_to_type_name(name: &LitStr) -> syn::Result<Ident> {
let span = name.span();
let name = name.value();
if &name[..2] != "m." {
return Err(syn::Error::new(
let name = name.strip_prefix("m.").ok_or_else(|| {
syn::Error::new(
span,
format!("well-known matrix events have to start with `m.` found `{}`", name),
));
}
)
})?;
let s: String = name[2..]
let s: String = name
.split(&['.', '_'] as &[char])
.map(|s| s.chars().next().unwrap().to_uppercase().to_string() + &s[1..])
.collect();