From 493b9a08c7cee032282da55e86804e1cab10499a Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 4 Mar 2022 17:37:06 +0100 Subject: [PATCH] macros: Move utility things into util module --- crates/ruma-macros/src/events/event.rs | 18 +++----------- crates/ruma-macros/src/lib.rs | 33 ++++++------------------- crates/ruma-macros/src/util.rs | 34 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 40 deletions(-) create mode 100644 crates/ruma-macros/src/util.rs diff --git a/crates/ruma-macros/src/events/event.rs b/crates/ruma-macros/src/events/event.rs index 083c8a45..405696a2 100644 --- a/crates/ruma-macros/src/events/event.rs +++ b/crates/ruma-macros/src/events/event.rs @@ -3,15 +3,15 @@ use proc_macro2::{Span, TokenStream}; use quote::{format_ident, quote}; use syn::{ - parse_quote, Data, DataStruct, DeriveInput, Field, Fields, FieldsNamed, GenericParam, Ident, - Meta, MetaList, NestedMeta, + parse_quote, Data, DataStruct, DeriveInput, Field, Fields, FieldsNamed, GenericParam, Meta, + MetaList, NestedMeta, }; use super::{ event_parse::{to_kind_variation, EventKind, EventKindVariation}, util::is_non_stripped_room_event, }; -use crate::import_ruma_common; +use crate::{import_ruma_common, util::to_camel_case}; /// Derive `Event` macro code generation. pub fn expand_event(input: DeriveInput) -> syn::Result { @@ -556,15 +556,3 @@ fn expand_eq_ord_event(input: &DeriveInput) -> TokenStream { } } } - -/// CamelCase's a field ident like "foo_bar" to "FooBar". -fn to_camel_case(name: &Ident) -> Ident { - let span = name.span(); - let name = name.to_string(); - - let s: String = name - .split('_') - .map(|s| s.chars().next().unwrap().to_uppercase().to_string() + &s[1..]) - .collect(); - Ident::new(&s, span) -} diff --git a/crates/ruma-macros/src/lib.rs b/crates/ruma-macros/src/lib.rs index 6248db56..2fa7a3b1 100644 --- a/crates/ruma-macros/src/lib.rs +++ b/crates/ruma-macros/src/lib.rs @@ -8,14 +8,19 @@ use proc_macro::TokenStream; use proc_macro2 as pm2; -use proc_macro_crate::{crate_name, FoundCrate}; -use quote::{format_ident, quote}; +use quote::quote; use ruma_identifiers_validation::{ device_key_id, event_id, key_id, mxc_uri, room_alias_id, room_id, room_version_id, server_name, user_id, }; use syn::{parse_macro_input, DeriveInput, ItemEnum}; +mod api; +mod events; +mod identifiers; +mod serde; +mod util; + use self::{ api::{request::expand_derive_request, response::expand_derive_response, Api}, events::{ @@ -36,13 +41,9 @@ use self::{ outgoing::expand_derive_outgoing, serialize_as_ref_str::expand_serialize_as_ref_str, }, + util::import_ruma_common, }; -mod api; -mod events; -mod identifiers; -mod serde; - /// Generates an enum to represent the various Matrix event types. /// /// This macro also implements the necessary traits for the type to serialize and deserialize @@ -107,24 +108,6 @@ pub fn derive_event(input: TokenStream) -> TokenStream { expand_event(input).unwrap_or_else(syn::Error::into_compile_error).into() } -pub(crate) fn import_ruma_common() -> pm2::TokenStream { - if let Ok(FoundCrate::Name(name)) = crate_name("ruma-common") { - let import = format_ident!("{}", name); - quote! { ::#import } - } else if let Ok(FoundCrate::Name(name)) = crate_name("ruma") { - let import = format_ident!("{}", name); - quote! { ::#import } - } else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk") { - let import = format_ident!("{}", name); - quote! { ::#import::ruma } - } else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk-appservice") { - let import = format_ident!("{}", name); - quote! { ::#import::ruma } - } else { - quote! { ::ruma_common } - } -} - /// Generates `From` implementations for event enums. #[proc_macro_derive(EventEnumFromEvent)] pub fn derive_from_event_to_enum(input: TokenStream) -> TokenStream { diff --git a/crates/ruma-macros/src/util.rs b/crates/ruma-macros/src/util.rs new file mode 100644 index 00000000..1d3a4bba --- /dev/null +++ b/crates/ruma-macros/src/util.rs @@ -0,0 +1,34 @@ +use proc_macro2::TokenStream; +use proc_macro_crate::{crate_name, FoundCrate}; +use quote::{format_ident, quote}; +use syn::Ident; + +pub(crate) fn import_ruma_common() -> TokenStream { + if let Ok(FoundCrate::Name(name)) = crate_name("ruma-common") { + let import = format_ident!("{}", name); + quote! { ::#import } + } else if let Ok(FoundCrate::Name(name)) = crate_name("ruma") { + let import = format_ident!("{}", name); + quote! { ::#import } + } else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk") { + let import = format_ident!("{}", name); + quote! { ::#import::ruma } + } else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk-appservice") { + let import = format_ident!("{}", name); + quote! { ::#import::ruma } + } else { + quote! { ::ruma_common } + } +} + +/// CamelCase's a field ident like "foo_bar" to "FooBar". +pub(crate) fn to_camel_case(name: &Ident) -> Ident { + let span = name.span(); + let name = name.to_string(); + + let s: String = name + .split('_') + .map(|s| s.chars().next().unwrap().to_uppercase().to_string() + &s[1..]) + .collect(); + Ident::new(&s, span) +}