1use pmutil::q;
2
3extern crate proc_macro;
4
5mod inject;
6mod injector;
7
8#[proc_macro_attribute]
10pub fn inject(
11 _: proc_macro::TokenStream,
12 fn_item: proc_macro::TokenStream,
13) -> proc_macro::TokenStream {
14 let input =
15 syn::parse(fn_item).expect("#[inject] Currently only supports a standalone function");
16 let items = self::inject::expand(input);
17
18 let mut q = q!({});
19 for item in &items {
20 q.push_tokens(&item)
21 }
22
23 q.into()
24}
25
26#[proc_macro_attribute]
28pub fn injector(
29 _: proc_macro::TokenStream,
30 fn_item: proc_macro::TokenStream,
31) -> proc_macro::TokenStream {
32 let input = syn::parse(fn_item).expect("#[injector] expects a standalone function");
33 let items = self::injector::expand(input);
34
35 let mut q = q!({});
36 for item in &items {
37 q.push_tokens(&item)
38 }
39
40 q.into()
41}