chassis 0.1.0

Compile-time dependency injection framework
Documentation
use chassis::integration;

pub struct Greeter {
    message: String,
    count: i32,
}

impl Greeter {
    pub fn new(message: String, count: i32) -> Self {
        Self { message, count }
    }

    pub fn say_hello(&self) {
        for _ in 0..self.count {
            println!("{}", self.message);
        }
    }
}

#[integration]
mod int_mod {
    use super::*;

    pub struct DemoModule;

    pub struct Message(String);
    pub struct Count(i32);

    impl DemoModule {
        pub fn provide_count() -> Count {
            Count(5)
        }

        pub fn provide_message() -> Message {
            Message("Hello World".to_string())
        }

        pub fn provide_greeter(message: Message, count: Count) -> Greeter {
            Greeter::new(message.0, count.0)
        }
    }

    pub trait DemoComponent {
        fn resolve_greeter(&self) -> Greeter;
    }
}

fn main() {
    use crate::int_mod::DemoComponent;

    let injector = int_mod::DemoComponentImpl::new();
    let greeter = injector.resolve_greeter();
    greeter.say_hello();
}