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