use chassis::{injector, module};
#[derive(PartialEq, Debug)]
pub struct StringArg(String);
#[derive(PartialEq, Debug)]
pub struct IntArg(i32);
#[derive(PartialEq, Debug)]
pub struct Dummy {
string: StringArg,
int: IntArg,
}
#[derive(Default)]
struct DummyProvider1;
#[module]
impl DummyProvider1 {
pub fn provide_int() -> IntArg {
IntArg(42)
}
}
#[derive(Default)]
struct DummyProvider2;
#[module]
impl DummyProvider2 {
pub fn provide_string() -> StringArg {
StringArg("Test".to_string())
}
pub fn provide_dummy(string: StringArg, int: IntArg) -> Dummy {
Dummy { string, int }
}
}
#[injector(modules = [DummyProvider1, DummyProvider2])]
pub trait DummyFactory1 {
fn resolve_dummy(&self) -> Dummy;
}
#[injector(modules = [DummyProvider1, DummyProvider2])]
pub trait DummyFactory2 {
fn resolve_dummy(&self) -> Dummy;
}
#[test]
fn check() {
let injector1 = <dyn DummyFactory1>::new().unwrap();
let injector2 = <dyn DummyFactory2>::new().unwrap();
let dummy1 = injector1.resolve_dummy();
let dummy2 = injector2.resolve_dummy();
assert_eq!(dummy1, dummy2);
}