diff options
author | HampusM <hampus@hampusmat.com> | 2022-07-09 22:02:15 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-07-09 22:02:15 +0200 |
commit | 152a7a71101b94e4ddaa221396403d7dd1e76dbe (patch) | |
tree | cff8e46dc88396165b87e3cc83227eda1e51e186 | |
parent | dda28f312ac87e84b6daed1ace7b2bcc3e47f71d (diff) |
docs: add example
-rw-r--r-- | example/Cargo.toml | 11 | ||||
-rw-r--r-- | example/src/main.rs | 112 |
2 files changed, 123 insertions, 0 deletions
diff --git a/example/Cargo.toml b/example/Cargo.toml new file mode 100644 index 0000000..c80daa3 --- /dev/null +++ b/example/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "example" +version = "0.1.0" +license = "LGPL-2.1" +authors = ["HampusM <hampus@hampusmat.com>"] +edition = "2021" + +[dependencies] +syrette = { path = "../syrette" } +error-stack = "0.1.1" + diff --git a/example/src/main.rs b/example/src/main.rs new file mode 100644 index 0000000..920d9f0 --- /dev/null +++ b/example/src/main.rs @@ -0,0 +1,112 @@ +use syrette::{injectable, DIContainer, DIContainerError}; + +trait IDog +{ + fn woof(&self); +} + +struct Dog {} + +#[injectable(IDog)] +impl Dog +{ + fn new() -> Self + { + Self {} + } +} + +impl IDog for Dog +{ + fn woof(&self) + { + println!("Woof!"); + } +} + +trait ICat +{ + fn meow(&self); +} + +struct Cat {} + +#[injectable(ICat)] +impl Cat +{ + fn new() -> Self + { + Self {} + } +} + +impl ICat for Cat +{ + fn meow(&self) + { + println!("Meow!"); + } +} + +trait ICow +{ + fn moo(&self); +} + +trait IHuman +{ + fn make_pets_make_sounds(&self); +} + +struct Human +{ + _dog: Box<dyn IDog>, + _cat: Box<dyn ICat>, +} + +#[injectable(IHuman)] +impl Human +{ + fn new(dog: Box<dyn IDog>, cat: Box<dyn ICat>) -> Self + { + Self { + _dog: dog, + _cat: cat, + } + } +} + +impl IHuman for Human +{ + fn make_pets_make_sounds(&self) + { + println!("Hi doggy!"); + + self._dog.woof(); + + println!("Hi kitty!"); + + self._cat.meow(); + } +} + +fn main() -> error_stack::Result<(), DIContainerError> +{ + println!("Hello, world!"); + + let mut di_container: DIContainer = DIContainer::new(); + + di_container.bind::<dyn IDog>().to::<Dog>(); + di_container.bind::<dyn ICat>().to::<Cat>(); + di_container.bind::<dyn IHuman>().to::<Human>(); + + let dog = di_container.get::<dyn IDog>()?; + + dog.woof(); + + let human = di_container.get::<dyn IHuman>()?; + + human.make_pets_make_sounds(); + + Ok(()) +} |