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 proc_macro2::{Span, TokenStream};
|
||||||
use quote::{format_ident, quote};
|
use quote::{format_ident, quote};
|
||||||
use syn::{
|
use syn::{
|
||||||
parse_quote, Data, DataStruct, DeriveInput, Field, Fields, FieldsNamed, GenericParam, Ident,
|
parse_quote, Data, DataStruct, DeriveInput, Field, Fields, FieldsNamed, GenericParam, Meta,
|
||||||
Meta, MetaList, NestedMeta,
|
MetaList, NestedMeta,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
event_parse::{to_kind_variation, EventKind, EventKindVariation},
|
event_parse::{to_kind_variation, EventKind, EventKindVariation},
|
||||||
util::is_non_stripped_room_event,
|
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.
|
/// Derive `Event` macro code generation.
|
||||||
pub fn expand_event(input: DeriveInput) -> syn::Result<TokenStream> {
|
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_macro::TokenStream;
|
||||||
use proc_macro2 as pm2;
|
use proc_macro2 as pm2;
|
||||||
use proc_macro_crate::{crate_name, FoundCrate};
|
use quote::quote;
|
||||||
use quote::{format_ident, quote};
|
|
||||||
use ruma_identifiers_validation::{
|
use ruma_identifiers_validation::{
|
||||||
device_key_id, event_id, key_id, mxc_uri, room_alias_id, room_id, room_version_id, server_name,
|
device_key_id, event_id, key_id, mxc_uri, room_alias_id, room_id, room_version_id, server_name,
|
||||||
user_id,
|
user_id,
|
||||||
};
|
};
|
||||||
use syn::{parse_macro_input, DeriveInput, ItemEnum};
|
use syn::{parse_macro_input, DeriveInput, ItemEnum};
|
||||||
|
|
||||||
|
mod api;
|
||||||
|
mod events;
|
||||||
|
mod identifiers;
|
||||||
|
mod serde;
|
||||||
|
mod util;
|
||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
api::{request::expand_derive_request, response::expand_derive_response, Api},
|
api::{request::expand_derive_request, response::expand_derive_response, Api},
|
||||||
events::{
|
events::{
|
||||||
@ -36,13 +41,9 @@ use self::{
|
|||||||
outgoing::expand_derive_outgoing,
|
outgoing::expand_derive_outgoing,
|
||||||
serialize_as_ref_str::expand_serialize_as_ref_str,
|
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.
|
/// Generates an enum to represent the various Matrix event types.
|
||||||
///
|
///
|
||||||
/// This macro also implements the necessary traits for the type to serialize and deserialize
|
/// 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()
|
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.
|
/// Generates `From` implementations for event enums.
|
||||||
#[proc_macro_derive(EventEnumFromEvent)]
|
#[proc_macro_derive(EventEnumFromEvent)]
|
||||||
pub fn derive_from_event_to_enum(input: TokenStream) -> TokenStream {
|
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