macros: Remove some unnecessary short-circuiting in event proc-macros
This commit is contained in:
parent
634f93c985
commit
1415e32a1d
@ -45,7 +45,10 @@ pub fn expand_event(input: DeriveInput) -> syn::Result<TokenStream> {
|
|||||||
let mut res = TokenStream::new();
|
let mut res = TokenStream::new();
|
||||||
|
|
||||||
res.extend(expand_serialize_event(&input, var, &fields, &ruma_common));
|
res.extend(expand_serialize_event(&input, var, &fields, &ruma_common));
|
||||||
res.extend(expand_deserialize_event(&input, kind, var, &fields, &ruma_common)?);
|
res.extend(
|
||||||
|
expand_deserialize_event(&input, kind, var, &fields, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
|
||||||
if var.is_sync() {
|
if var.is_sync() {
|
||||||
res.extend(expand_sync_from_into_full(&input, kind, var, &fields, &ruma_common));
|
res.extend(expand_sync_from_into_full(&input, kind, var, &fields, &ruma_common));
|
||||||
|
@ -184,25 +184,20 @@ pub fn expand_event_content(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We only generate redacted content structs for state and message-like events
|
// We only generate redacted content structs for state and message-like events
|
||||||
let redacted_event_content = needs_redacted(&content_attr, event_kind)
|
let redacted_event_content = needs_redacted(&content_attr, event_kind).then(|| {
|
||||||
.then(|| {
|
generate_redacted_event_content(ident, fields.clone(), event_type, event_kind, ruma_common)
|
||||||
generate_redacted_event_content(
|
.unwrap_or_else(syn::Error::into_compile_error)
|
||||||
ident,
|
});
|
||||||
fields.clone(),
|
|
||||||
event_type,
|
|
||||||
event_kind,
|
|
||||||
ruma_common,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.transpose()?;
|
|
||||||
|
|
||||||
let event_content_impl =
|
let event_content_impl =
|
||||||
generate_event_content_impl(ident, fields, event_type, event_kind, ruma_common)?;
|
generate_event_content_impl(ident, fields, event_type, event_kind, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error);
|
||||||
let static_event_content_impl = event_kind
|
let static_event_content_impl = event_kind
|
||||||
.map(|k| generate_static_event_content_impl(ident, k, false, event_type, ruma_common));
|
.map(|k| generate_static_event_content_impl(ident, k, false, event_type, ruma_common));
|
||||||
let type_aliases = event_kind
|
let type_aliases = event_kind.map(|k| {
|
||||||
.map(|k| generate_event_type_aliases(k, ident, &event_type.value(), ruma_common))
|
generate_event_type_aliases(k, ident, &event_type.value(), ruma_common)
|
||||||
.transpose()?;
|
.unwrap_or_else(syn::Error::into_compile_error)
|
||||||
|
});
|
||||||
|
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
#redacted_event_content
|
#redacted_event_content
|
||||||
@ -301,7 +296,8 @@ fn generate_redacted_event_content<'a>(
|
|||||||
event_type,
|
event_type,
|
||||||
event_kind,
|
event_kind,
|
||||||
ruma_common,
|
ruma_common,
|
||||||
)?;
|
)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error);
|
||||||
|
|
||||||
let static_event_content_impl = event_kind.map(|k| {
|
let static_event_content_impl = event_kind.map(|k| {
|
||||||
generate_static_event_content_impl(&redacted_ident, k, true, event_type, ruma_common)
|
generate_static_event_content_impl(&redacted_ident, k, true, event_type, ruma_common)
|
||||||
|
@ -48,29 +48,71 @@ pub fn expand_event_enums(input: &EventEnumDecl) -> syn::Result<TokenStream> {
|
|||||||
let variants = &variants;
|
let variants = &variants;
|
||||||
let ruma_common = &ruma_common;
|
let ruma_common = &ruma_common;
|
||||||
|
|
||||||
res.extend(expand_event_enum(kind, V::Full, events, attrs, variants, ruma_common));
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::Full, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
res.extend(expand_content_enum(kind, events, attrs, variants, ruma_common));
|
res.extend(expand_content_enum(kind, events, attrs, variants, ruma_common));
|
||||||
|
|
||||||
if matches!(kind, EventKind::Ephemeral | EventKind::MessageLike | EventKind::State) {
|
if matches!(kind, EventKind::Ephemeral | EventKind::MessageLike | EventKind::State) {
|
||||||
res.extend(expand_event_enum(kind, V::Sync, events, attrs, variants, ruma_common));
|
res.extend(
|
||||||
res.extend(expand_from_full_event(kind, V::Full, variants));
|
expand_event_enum(kind, V::Sync, events, attrs, variants, ruma_common)
|
||||||
res.extend(expand_into_full_event(kind, V::Sync, variants, ruma_common));
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_from_full_event(kind, V::Full, variants)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_into_full_event(kind, V::Sync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if matches!(kind, EventKind::State) {
|
if matches!(kind, EventKind::State) {
|
||||||
res.extend(expand_event_enum(kind, V::Stripped, events, attrs, variants, ruma_common));
|
res.extend(
|
||||||
res.extend(expand_event_enum(kind, V::Initial, events, attrs, variants, ruma_common));
|
expand_event_enum(kind, V::Stripped, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::Initial, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if matches!(kind, EventKind::MessageLike | EventKind::State) {
|
if matches!(kind, EventKind::MessageLike | EventKind::State) {
|
||||||
res.extend(expand_event_enum(kind, V::Redacted, events, attrs, variants, ruma_common));
|
res.extend(
|
||||||
res.extend(expand_event_enum(kind, V::RedactedSync, events, attrs, variants, ruma_common));
|
expand_event_enum(kind, V::Redacted, events, attrs, variants, ruma_common)
|
||||||
res.extend(expand_redact(kind, V::Full, variants, ruma_common));
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
res.extend(expand_redact(kind, V::Sync, variants, ruma_common));
|
);
|
||||||
res.extend(expand_possibly_redacted_enum(kind, V::Full, ruma_common));
|
res.extend(
|
||||||
res.extend(expand_possibly_redacted_enum(kind, V::Sync, ruma_common));
|
expand_event_enum(kind, V::RedactedSync, events, attrs, variants, ruma_common)
|
||||||
res.extend(expand_from_full_event(kind, V::Redacted, variants));
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
res.extend(expand_into_full_event(kind, V::RedactedSync, variants, ruma_common));
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_redact(kind, V::Full, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_redact(kind, V::Sync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_possibly_redacted_enum(kind, V::Full, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_possibly_redacted_enum(kind, V::Sync, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_from_full_event(kind, V::Redacted, variants)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_into_full_event(kind, V::RedactedSync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
@ -44,14 +44,38 @@ pub fn expand_event_type_enum(
|
|||||||
|
|
||||||
let mut res = TokenStream::new();
|
let mut res = TokenStream::new();
|
||||||
|
|
||||||
res.extend(generate_enum("EventType", &all, &ruma_common)?);
|
res.extend(
|
||||||
res.extend(generate_enum("RoomEventType", &room, &ruma_common)?);
|
generate_enum("EventType", &all, &ruma_common)
|
||||||
res.extend(generate_enum("StateEventType", &state, &ruma_common)?);
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
res.extend(generate_enum("MessageLikeEventType", &message, &ruma_common)?);
|
);
|
||||||
res.extend(generate_enum("EphemeralRoomEventType", &ephemeral, &ruma_common)?);
|
res.extend(
|
||||||
res.extend(generate_enum("RoomAccountDataEventType", &room_account, &ruma_common)?);
|
generate_enum("RoomEventType", &room, &ruma_common)
|
||||||
res.extend(generate_enum("GlobalAccountDataEventType", &global_account, &ruma_common)?);
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
res.extend(generate_enum("ToDeviceEventType", &to_device, &ruma_common)?);
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("StateEventType", &state, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("MessageLikeEventType", &message, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("EphemeralRoomEventType", &ephemeral, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("RoomAccountDataEventType", &room_account, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("GlobalAccountDataEventType", &global_account, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
generate_enum("ToDeviceEventType", &to_device, &ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
@ -72,24 +72,25 @@ use self::{
|
|||||||
//// supported: https://github.com/rust-lang/rust/issues/74563
|
//// supported: https://github.com/rust-lang/rust/issues/74563
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn event_enum(input: TokenStream) -> TokenStream {
|
pub fn event_enum(input: TokenStream) -> TokenStream {
|
||||||
|
let event_enum_input = syn::parse_macro_input!(input as EventEnumInput);
|
||||||
|
|
||||||
let ruma_common = import_ruma_common();
|
let ruma_common = import_ruma_common();
|
||||||
|
|
||||||
let event_enum_input = syn::parse_macro_input!(input as EventEnumInput);
|
|
||||||
let enums = event_enum_input
|
let enums = event_enum_input
|
||||||
.enums
|
.enums
|
||||||
.iter()
|
.iter()
|
||||||
.map(expand_event_enums)
|
.map(|e| expand_event_enums(e).unwrap_or_else(syn::Error::into_compile_error))
|
||||||
.collect::<syn::Result<pm2::TokenStream>>();
|
.collect::<pm2::TokenStream>();
|
||||||
let event_types = expand_event_type_enum(event_enum_input, ruma_common);
|
|
||||||
event_types
|
let event_types = expand_event_type_enum(event_enum_input, ruma_common)
|
||||||
.and_then(|types| {
|
.unwrap_or_else(syn::Error::into_compile_error);
|
||||||
enums.map(|mut enums| {
|
|
||||||
enums.extend(types);
|
let tokens = quote! {
|
||||||
enums
|
#enums
|
||||||
})
|
#event_types
|
||||||
})
|
};
|
||||||
.unwrap_or_else(syn::Error::into_compile_error)
|
|
||||||
.into()
|
tokens.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generates an implementation of `ruma_common::events::EventContent`.
|
/// Generates an implementation of `ruma_common::events::EventContent`.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user