Skip to main content

loso_inject_macros/
lib.rs

1// Copyright (c) 2025
2//
3// SPDX-License-Identifier: MIT
4
5use 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}