Skip to main content

rdi_macros/
lib.rs

1use pmutil::q;
2
3extern crate proc_macro;
4
5mod inject;
6mod injector;
7
8/// Make function arguments injectable.
9#[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/// Creates an injector.
27#[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}