diff options
| author | Fuwn <[email protected]> | 2023-04-16 15:42:59 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-04-16 15:42:59 -0700 |
| commit | 273b5e9f127ce2d4b985a4b96949a5efdc00854d (patch) | |
| tree | 8a941ebd2013f7aa43a3f0697a83616094edfe18 | |
| parent | deps(rust): bump to nightly-2023-04-15 (diff) | |
| download | locus-273b5e9f127ce2d4b985a4b96949a5efdc00854d.tar.xz locus-273b5e9f127ce2d4b985a4b96949a5efdc00854d.zip | |
fix(amenadiel): modules macro unwrap on none
| -rw-r--r-- | amenadiel/Cargo.toml | 1 | ||||
| -rw-r--r-- | amenadiel/src/lib.rs | 35 |
2 files changed, 15 insertions, 21 deletions
diff --git a/amenadiel/Cargo.toml b/amenadiel/Cargo.toml index c94115d..c6cdf62 100644 --- a/amenadiel/Cargo.toml +++ b/amenadiel/Cargo.toml @@ -12,3 +12,4 @@ proc-macro = true [dependencies] quote = "1.0.26" # Quasi-quoting +syn = "2.0.15" # Source Code Parsing diff --git a/amenadiel/src/lib.rs b/amenadiel/src/lib.rs index 0c97269..0206037 100644 --- a/amenadiel/src/lib.rs +++ b/amenadiel/src/lib.rs @@ -29,6 +29,7 @@ use proc_macro::TokenStream; use quote::quote; +use syn::Ident; /// Legitimise and mount Locus modules /// @@ -37,40 +38,32 @@ use quote::quote; /// This *should* never panic, but if it does, we don't care. #[proc_macro] pub fn modules(input: TokenStream) -> TokenStream { - let mut tokens = input.into_iter(); - let mut span = if let Some(span) = tokens.next() { - span.span() - } else { - return quote::quote!().into(); - }; - - for token in tokens { - span = span.join(token.span()).unwrap(); - } - + let input_modules: Vec<Ident> = syn::parse_macro_input!( + input with syn::punctuated::Punctuated::<Ident, syn::Token![,]>::parse_terminated + ) + .into_iter() + .collect(); let mut legitimised_modules = quote!(); - let mut modules = quote!(); + let mut mounted_modules = quote!(); - span.source_text().unwrap().lines().for_each(|line| { - if line.contains("search") { + for module_name in input_modules { + if module_name == "search" { legitimised_modules.extend(quote!( pub mod search; )); - modules.extend(quote!(router.attach_stateless(search::module);)); + mounted_modules.extend(quote!(router.attach_stateless(search::module);)); } else { - let module_name = - quote::format_ident!("{}", line.trim_end_matches(',').trim_start()); - legitimised_modules.extend(quote!(mod #module_name;)); - modules.extend(quote!(router.attach_stateless(#module_name::module);)); + mounted_modules + .extend(quote!(router.attach_stateless(#module_name::module);)); } - }); + } quote! { #legitimised_modules pub fn module(router: &mut ::windmark::Router) { - #modules + #mounted_modules } } .into() |