Crates.io | kizuna |
lib.rs | kizuna |
version | 0.1.0 |
source | src |
created_at | 2023-04-19 02:11:56.726997 |
updated_at | 2023-04-19 02:11:56.726997 |
description | A simple service locator |
homepage | |
repository | https://github.com/Neo-Ciber94/kizuna |
max_upload_size | |
id | 843121 |
size | 24,826 |
🔍 A simple service locator for Rust.
This library provides a simple service locator for Rust programs. It allows for easy insertion and retrieval of values by type, and supports both single instance values and values created by factory functions.
cargo add kizuna
or in your Cargo.toml
kizuna = "0.1.0"
use kizuna::Locator;
#[derive(Debug, Clone, PartialEq)]
struct Name(&'static str);
#[derive(Debug)]
struct Person(Name);
fn greet(person: Person) {
println!("Hello {:?}", person.0);
}
fn main() {
let mut locator = Locator::new();
// Register the dependencies
locator.insert(Name("Athena"));
locator.insert_with(|locator| Person(locator.get::<Name>().unwrap()));
let person = locator.get::<Person>().unwrap();
assert_eq!(person.0, Name("Athena"));
// You can call a function injecting the dependencies
locator.invoke(greet).unwrap();
}
async/await
use kizuna::Locator;
async fn hello(greet: String) -> usize {
println!("{greet}");
greet.len()
}
#[tokio::main]
async fn main() {
let mut locator = Locator::new();
locator.insert(String::from("hello world"));
let result = locator.invoke_async(hello).await.unwrap();
assert_eq!(result, 11);
}
Run tests with cargo test --lib
This project is licensed under the MIT License