1mod template;
2mod tools;
3
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::parse_macro_input;
7
8use template::{generate_closures, rewrite_names};
9use tools::PipeMacros;
10
11#[proc_macro]
12pub fn pipe(input: TokenStream) -> TokenStream {
13 let input = parse_macro_input!(input as PipeMacros);
14 let input = rewrite_names(input)
15 .expect("Failed to rewrite names. Please check the error message above.");
16
17 let closure_impl_list = generate_closures(input.clone()).expect(
18 "Failed to generate closure implementation list. Please check the error message above.",
19 );
20 let pool_decl = template::generate_pool(input)
21 .expect("Failed to generate pool declaration. Please check the error message above.");
22
23 quote! {
24 {
25 #closure_impl_list
26
27 #pool_decl
28
29 _Pool::new()
30 }
31 }
32 .into()
33}