ferrunix-core 0.1.0

Core types, traits, and implementations for ferrunix
Documentation
ferrunix-core-0.1.0 has been yanked.

Ferrunix

Build Status Crates.io API reference

A simple, idiomatic, and lightweight dependency injection framework for Rust.

[dependencies]
ferrunix = "0"

Compiler support: requires rustc 1.62+

Example

use ferrunix::{Registry, Transient};

#[derive(Default, Debug)]
pub struct Logger {}

impl Logger {
    pub fn info(&self, message: &str) {
        println!("INFO: {message}");
    }
}

#[derive(Debug)]
pub struct Worker {
    logger: Box<Logger>,
}

impl Worker {
    pub fn new(logger: Box<Logger>) -> Self {
        Self { logger }
    }

    pub fn do_work(&self) {
        self.logger.info("doing something ...");
    }
}

fn main() {
    let mut registry = Registry::empty();
    registry.transient(|| Logger::default());
    registry
        .with_deps::<_, (Transient<Logger>,)>()
        .transient(|(logger,)| Worker::new(logger));

    let worker = registry.get_transient::<Worker>().unwrap();
    worker.do_work();
}

License