Attribute Macro nject_macro::module

source ·
#[module]
Expand description

Declare a module to export internal types.

use nject::{injectable, provider};

mod sub {
    use nject::{injectable, module};

    #[injectable]
    struct InternalType(#[inject(123)] i32); // Not visible outside of module.

    #[injectable]
    pub struct Facade<'a> {
        hidden: &'a InternalType
    }

    #[injectable]
    #[module]
    pub struct Module {
        #[export]
        hidden: InternalType
    }
}

#[injectable]
#[provider]
struct Provider {
    #[import]
    sub_mod: sub::Module
}

fn main() {
    #[provider]
    struct InitProvider;

    let provider = InitProvider.provide::<Provider>();
    let _facade = provider.provide::<sub::Facade>();
}