chassis 0.2.0

Compile-time dependency injection framework
Documentation
pub struct StringArg(String);
pub struct IntArg(i32);

pub struct Dummy {
    string: StringArg,
    int: IntArg,
}

#[derive(Default)]
pub struct DummyProvider;

#[chassis::module]
impl DummyProvider {
    pub fn provide_string() -> StringArg {
        StringArg("Test".to_string())
    }

    pub fn provide_int() -> IntArg {
        IntArg(42)
    }

    pub fn provide_dummy(string: StringArg, int: IntArg) -> Dummy {
        Dummy { string, int }
    }
}

#[chassis::injector(modules = [DummyProvider])]
pub trait DummyFactory {
    fn resolve_dummy(&self) -> Dummy;
}

#[test]
fn check() {
    let injector = <dyn DummyFactory>::new().unwrap();
    let dummy = injector.resolve_dummy();
    assert_eq!("Test", &dummy.string.0);
    assert_eq!(42, dummy.int.0);
}