https://github.com/thruster-rs/thruster-jab
https://github.com/thruster-rs/thruster-jab
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/thruster-rs/thruster-jab
- Owner: thruster-rs
- Created: 2021-10-22T16:47:48.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-10-22T16:52:24.000Z (over 3 years ago)
- Last Synced: 2025-02-12T17:17:21.001Z (4 months ago)
- Language: Rust
- Size: 10.7 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Thruster Jab
Because this is a dependency injection library, and shots are injected, and shots are called jabs in the UK.## What is this?
Thruster Jab is a dependency injection library for your service injection needs. It works using dynamic dispatch via `Box`. If you're looking to make something that will need mocks in order to test (say, an API that makes external calls, or a service that is very expensive) then Jab might be helpful to you.## Example
Although built for [thruster](https://github.com/thruster-rs/thruster), Jab can be used independently. A simple example would be:```rs
struct A(i32);trait C {}
impl C for A {}
let mut jab = JabDI::default();
let a = A(0);
provide!(jab, dyn C, a);
let something = fetch!(jab, dyn C); // This is the original a that we passed in, now as a C trait.
```A slightly longer, but more "copy pasta" example (taken from our tests because I'm lazy) would be:
```rs
// Just making two structs that impl two traits
#[derive(Debug, PartialEq)]
struct A(i32);#[derive(Debug, PartialEq)]
struct B(i32);trait C {
fn valc(&self) -> i32;
}
trait D {
fn vald(&self) -> i32;
}impl C for A {
fn valc(&self) -> i32 {
self.0
}
}impl D for B {
fn vald(&self) -> i32 {
self.0
}
}// This is the good part
let mut jab = JabDI::default();let a = A(0);
let b = B(1);provide!(jab, dyn C, a);
provide!(jab, dyn D, b);assert_eq!(
0,
fetch!(jab, dyn C).valc(),
"it should correctly find struct A for trait C"
);assert_eq!(
1,
fetch!(jab, dyn D).vald(),
"it should correctly find struct B for trait D"
);
```For use with actual tests, check out our `hello_world.rs` example.