aboutsummaryrefslogtreecommitdiff
path: root/examples/generics
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-07-24 15:58:30 +0200
committerHampusM <hampus@hampusmat.com>2022-07-24 15:58:30 +0200
commit5335cdad99a6d566ea6e83f97012c7954ba93c45 (patch)
treeb4c91634b34f6d3858d6dd210afb609d9a1f76d7 /examples/generics
parent5ea16d1e5bf716831bc8c54c5c4c86229d7e0463 (diff)
feat: add support for generics
Diffstat (limited to 'examples/generics')
-rw-r--r--examples/generics/bootstrap.rs17
-rw-r--r--examples/generics/interfaces/mod.rs1
-rw-r--r--examples/generics/interfaces/printer.rs6
-rw-r--r--examples/generics/main.rs19
-rw-r--r--examples/generics/printer.rs24
5 files changed, 67 insertions, 0 deletions
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<String> => Printer, di_container);
+ di_container_bind!(IPrinter<i32> => 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<Printable: Display>
+{
+ 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::<dyn IPrinter<String>>().unwrap();
+
+ string_printer.print("Hello there".to_string());
+
+ let int_printer = di_container.get::<dyn IPrinter<i32>>().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<Printable: Display> IPrinter<Printable> for Printer
+{
+ fn print(&self, out: Printable)
+ {
+ println!("{}", out);
+ }
+}