studiole_di_macros/
lib.rs1mod generate;
3mod parse;
4
5use proc_macro::TokenStream;
6use syn::parse_macro_input;
7
8#[proc_macro_derive(FromServices, attributes(di))]
22pub fn derive_from_services(input: TokenStream) -> TokenStream {
23 let input = parse_macro_input!(input as syn::DeriveInput);
24 match parse::parse_struct(&input) {
25 Ok(parsed) => generate::generate_sync(&parsed).into(),
26 Err(err) => err.to_compile_error().into(),
27 }
28}
29
30#[proc_macro_derive(FromServicesAsync, attributes(di))]
44pub fn derive_from_services_async(input: TokenStream) -> TokenStream {
45 let input = parse_macro_input!(input as syn::DeriveInput);
46 match parse::parse_struct(&input) {
47 Ok(parsed) => generate::generate_async(&parsed).into(),
48 Err(err) => err.to_compile_error().into(),
49 }
50}
51
52#[cfg(test)]
53mod tests;