macros: Move utility things into util module
This commit is contained in:
parent
1192bd1099
commit
493b9a08c7
@ -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<TokenStream> {
|
||||
@ -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)
|
||||
}
|
||||
|
@ -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 {
|
||||
|
34
crates/ruma-macros/src/util.rs
Normal file
34
crates/ruma-macros/src/util.rs
Normal file
@ -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)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user