loso_inject_macros/
lib.rs1use proc_macro::TokenStream;
6use proc_macro_error::proc_macro_error;
7use syn::{parse_macro_input, DeriveInput, ItemImpl};
8
9mod derive_inject;
10mod attribute_inject;
11
12#[proc_macro_error]
13#[proc_macro_derive(Inject, attributes(inject))]
14pub fn derive_inject(input: TokenStream) -> TokenStream {
15 let input = parse_macro_input!(input as DeriveInput);
16 let input = derive_inject::InjectStruct::parse(input);
17 let stream = input.generate_inject();
18 stream.into()
19}
20
21#[proc_macro_error]
22#[proc_macro_derive(InjectSingleton, attributes(inject))]
23pub fn derive_inject_singleton(input: TokenStream) -> TokenStream {
24 let input = parse_macro_input!(input as DeriveInput);
25 let input = derive_inject::InjectStruct::parse(input);
26 let stream = input.generate_inject_singleton();
27 stream.into()
28}
29
30#[proc_macro_error]
31#[proc_macro_attribute]
32pub fn inject(_attr: TokenStream, item: TokenStream) -> TokenStream {
33 let item = parse_macro_input!(item as ItemImpl);
34 let impl_block = attribute_inject::InjectImplBlock::parse(item);
35 impl_block.generate_inject().into()
36}
37
38#[proc_macro_error]
39#[proc_macro_attribute]
40pub fn inject_singleton(_attr: TokenStream, item: TokenStream) -> TokenStream {
41 let item = parse_macro_input!(item as ItemImpl);
42 let impl_block = attribute_inject::InjectImplBlock::parse(item);
43 impl_block.generate_inject_singleton().into()
44}