Expand description
§kizuna
🔍 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.
§Add to your project
cargo add kizunaor in your Cargo.toml
kizuna = "0.1.0"§Usage
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();
}§Support for 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);
}§Test
Run tests with cargo test --lib
§License
This project is licensed under the MIT License
Modules§
- try_
locator - Provides a mechanism for insert and get dependencies that may fail.
Structs§
- Locator
- A service locator.
Enums§
- Locator
Error - An error that occurred while resolving a dependency.
- Provider
- A wrapper that stores the services from a locator.
Traits§
- Async
Invoke - Represents an async function that can be invoke using a service locator.
- From
Locator - A type that can be constructed from a
Locator. - Invoke
- Represents a function that can be invoke using a service locator.