From 5335cdad99a6d566ea6e83f97012c7954ba93c45 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 24 Jul 2022 15:58:30 +0200 Subject: feat: add support for generics --- examples/generics/bootstrap.rs | 17 +++++++++++++++++ examples/generics/interfaces/mod.rs | 1 + examples/generics/interfaces/printer.rs | 6 ++++++ examples/generics/main.rs | 19 +++++++++++++++++++ examples/generics/printer.rs | 24 ++++++++++++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 examples/generics/bootstrap.rs create mode 100644 examples/generics/interfaces/mod.rs create mode 100644 examples/generics/interfaces/printer.rs create mode 100644 examples/generics/main.rs create mode 100644 examples/generics/printer.rs (limited to 'examples/generics') diff --git a/examples/generics/bootstrap.rs b/examples/generics/bootstrap.rs new file mode 100644 index 0000000..072350e --- /dev/null +++ b/examples/generics/bootstrap.rs @@ -0,0 +1,17 @@ +use syrette::{di_container_bind, DIContainer}; + +// Interfaces +use crate::interfaces::printer::IPrinter; +// +// Implementations +use crate::printer::Printer; + +pub fn bootstrap() -> DIContainer +{ + let mut di_container = DIContainer::new(); + + di_container_bind!(IPrinter => Printer, di_container); + di_container_bind!(IPrinter => Printer, di_container); + + di_container +} diff --git a/examples/generics/interfaces/mod.rs b/examples/generics/interfaces/mod.rs new file mode 100644 index 0000000..3f31bdf --- /dev/null +++ b/examples/generics/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod printer; diff --git a/examples/generics/interfaces/printer.rs b/examples/generics/interfaces/printer.rs new file mode 100644 index 0000000..3098d0b --- /dev/null +++ b/examples/generics/interfaces/printer.rs @@ -0,0 +1,6 @@ +use std::fmt::Display; + +pub trait IPrinter +{ + fn print(&self, out: Printable); +} diff --git a/examples/generics/main.rs b/examples/generics/main.rs new file mode 100644 index 0000000..9442641 --- /dev/null +++ b/examples/generics/main.rs @@ -0,0 +1,19 @@ +mod bootstrap; +mod interfaces; +mod printer; + +use bootstrap::bootstrap; +use interfaces::printer::IPrinter; + +fn main() +{ + let di_container = bootstrap(); + + let string_printer = di_container.get::>().unwrap(); + + string_printer.print("Hello there".to_string()); + + let int_printer = di_container.get::>().unwrap(); + + int_printer.print(2782028); +} diff --git a/examples/generics/printer.rs b/examples/generics/printer.rs new file mode 100644 index 0000000..4307c4f --- /dev/null +++ b/examples/generics/printer.rs @@ -0,0 +1,24 @@ +use std::fmt::Display; + +use syrette::injectable; + +use crate::interfaces::printer::IPrinter; + +pub struct Printer {} + +#[injectable] +impl Printer +{ + pub fn new() -> Self + { + Self {} + } +} + +impl IPrinter for Printer +{ + fn print(&self, out: Printable) + { + println!("{}", out); + } +} -- cgit v1.2.3-18-g5258