aboutsummaryrefslogtreecommitdiff
path: root/syrette/src
diff options
context:
space:
mode:
Diffstat (limited to 'syrette/src')
-rw-r--r--syrette/src/castable_factory.rs38
-rw-r--r--syrette/src/di_container.rs11
-rw-r--r--syrette/src/interfaces/factory.rs6
-rw-r--r--syrette/src/interfaces/injectable.rs3
-rw-r--r--syrette/src/lib.rs1
-rw-r--r--syrette/src/provider.rs10
-rw-r--r--syrette/src/ptr.rs6
7 files changed, 46 insertions, 29 deletions
diff --git a/syrette/src/castable_factory.rs b/syrette/src/castable_factory.rs
index 8713ec4..d820c31 100644
--- a/syrette/src/castable_factory.rs
+++ b/syrette/src/castable_factory.rs
@@ -1,38 +1,42 @@
use crate::interfaces::factory::IFactory;
use crate::libs::intertrait::CastFrom;
+use crate::ptr::InterfacePtr;
pub trait AnyFactory: CastFrom {}
-pub struct CastableFactory<Args, Return>
+pub struct CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
- _func: &'static dyn Fn<Args, Output = Box<Return>>,
+ _func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>,
}
-impl<Args, Return> CastableFactory<Args, Return>
+impl<Args, ReturnInterface> CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
- pub fn new(func: &'static dyn Fn<Args, Output = Box<Return>>) -> Self
+ pub fn new(
+ func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>,
+ ) -> Self
{
Self { _func: func }
}
}
-impl<Args, Return> IFactory<Args, Return> for CastableFactory<Args, Return>
+impl<Args, ReturnInterface> IFactory<Args, ReturnInterface>
+ for CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
}
-impl<Args, Return> Fn<Args> for CastableFactory<Args, Return>
+impl<Args, ReturnInterface> Fn<Args> for CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
extern "rust-call" fn call(&self, args: Args) -> Self::Output
{
@@ -40,10 +44,10 @@ where
}
}
-impl<Args, Return> FnMut<Args> for CastableFactory<Args, Return>
+impl<Args, ReturnInterface> FnMut<Args> for CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output
{
@@ -51,12 +55,12 @@ where
}
}
-impl<Args, Return> FnOnce<Args> for CastableFactory<Args, Return>
+impl<Args, ReturnInterface> FnOnce<Args> for CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
- type Output = Box<Return>;
+ type Output = InterfacePtr<ReturnInterface>;
extern "rust-call" fn call_once(self, args: Args) -> Self::Output
{
@@ -64,9 +68,9 @@ where
}
}
-impl<Args, Return> AnyFactory for CastableFactory<Args, Return>
+impl<Args, ReturnInterface> AnyFactory for CastableFactory<Args, ReturnInterface>
where
Args: 'static,
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
}
diff --git a/syrette/src/di_container.rs b/syrette/src/di_container.rs
index 53c4287..86724e6 100644
--- a/syrette/src/di_container.rs
+++ b/syrette/src/di_container.rs
@@ -12,6 +12,7 @@ use crate::interfaces::injectable::Injectable;
use crate::libs::intertrait::cast_box::CastBox;
use crate::libs::intertrait::cast_rc::CastRc;
use crate::provider::{FactoryProvider, IProvider, InjectableTypeProvider, Providable};
+use crate::ptr::{FactoryPtr, InterfacePtr};
/// Binding builder for type `Interface` inside a [`DIContainer`].
pub struct BindingBuilder<'a, Interface>
@@ -52,7 +53,7 @@ where
/// associated [`DIContainer`].
pub fn to_factory<Args, Return>(
&mut self,
- factory_func: &'static dyn Fn<Args, Output = Box<Return>>,
+ factory_func: &'static dyn Fn<Args, Output = InterfacePtr<Return>>,
) where
Args: 'static,
Return: 'static + ?Sized,
@@ -64,7 +65,7 @@ where
self._di_container._bindings.insert(
interface_typeid,
- Rc::new(FactoryProvider::new(Rc::new(factory_impl))),
+ Rc::new(FactoryProvider::new(FactoryPtr::new(factory_impl))),
);
}
}
@@ -101,7 +102,9 @@ impl<'a> DIContainer
}
/// Returns a new instance of the type bound with `Interface`.
- pub fn get<Interface>(&self) -> error_stack::Result<Box<Interface>, DIContainerError>
+ pub fn get<Interface>(
+ &self,
+ ) -> error_stack::Result<InterfacePtr<Interface>, DIContainerError>
where
Interface: 'static + ?Sized,
{
@@ -144,7 +147,7 @@ impl<'a> DIContainer
/// Returns the factory bound with factory type `Interface`.
pub fn get_factory<Interface>(
&self,
- ) -> error_stack::Result<Rc<Interface>, DIContainerError>
+ ) -> error_stack::Result<FactoryPtr<Interface>, DIContainerError>
where
Interface: 'static + ?Sized,
{
diff --git a/syrette/src/interfaces/factory.rs b/syrette/src/interfaces/factory.rs
index ed03cce..3afd7a8 100644
--- a/syrette/src/interfaces/factory.rs
+++ b/syrette/src/interfaces/factory.rs
@@ -1,7 +1,9 @@
use crate::libs::intertrait::CastFrom;
+use crate::ptr::InterfacePtr;
-pub trait IFactory<Args, Return>: Fn<Args, Output = Box<Return>> + CastFrom
+pub trait IFactory<Args, ReturnInterface>:
+ Fn<Args, Output = InterfacePtr<ReturnInterface>> + CastFrom
where
- Return: 'static + ?Sized,
+ ReturnInterface: 'static + ?Sized,
{
}
diff --git a/syrette/src/interfaces/injectable.rs b/syrette/src/interfaces/injectable.rs
index e704e02..96d4f21 100644
--- a/syrette/src/interfaces/injectable.rs
+++ b/syrette/src/interfaces/injectable.rs
@@ -1,12 +1,13 @@
use crate::errors::injectable::ResolveError;
use crate::libs::intertrait::CastFrom;
+use crate::ptr::InterfacePtr;
use crate::DIContainer;
pub trait Injectable: CastFrom
{
fn resolve(
di_container: &DIContainer,
- ) -> error_stack::Result<Box<Self>, ResolveError>
+ ) -> error_stack::Result<InterfacePtr<Self>, ResolveError>
where
Self: Sized;
}
diff --git a/syrette/src/lib.rs b/syrette/src/lib.rs
index 945c0c0..40cbb83 100644
--- a/syrette/src/lib.rs
+++ b/syrette/src/lib.rs
@@ -121,6 +121,7 @@ pub mod castable_factory;
pub mod di_container;
pub mod errors;
pub mod interfaces;
+pub mod ptr;
pub use di_container::*;
pub use syrette_macros::*;
diff --git a/syrette/src/provider.rs b/syrette/src/provider.rs
index 800315f..c344f25 100644
--- a/syrette/src/provider.rs
+++ b/syrette/src/provider.rs
@@ -1,17 +1,17 @@
use std::marker::PhantomData;
-use std::rc::Rc;
use crate::castable_factory::AnyFactory;
use crate::errors::injectable::ResolveError;
use crate::interfaces::injectable::Injectable;
+use crate::ptr::{FactoryPtr, InterfacePtr};
use crate::DIContainer;
extern crate error_stack;
pub enum Providable
{
- Injectable(Box<dyn Injectable>),
- Factory(Rc<dyn AnyFactory>),
+ Injectable(InterfacePtr<dyn Injectable>),
+ Factory(FactoryPtr<dyn AnyFactory>),
}
pub trait IProvider
@@ -58,12 +58,12 @@ where
pub struct FactoryProvider
{
- _factory: Rc<dyn AnyFactory>,
+ _factory: FactoryPtr<dyn AnyFactory>,
}
impl FactoryProvider
{
- pub fn new(factory: Rc<dyn AnyFactory>) -> Self
+ pub fn new(factory: FactoryPtr<dyn AnyFactory>) -> Self
{
Self { _factory: factory }
}
diff --git a/syrette/src/ptr.rs b/syrette/src/ptr.rs
new file mode 100644
index 0000000..164e061
--- /dev/null
+++ b/syrette/src/ptr.rs
@@ -0,0 +1,6 @@
+use std::rc::Rc;
+
+pub type InterfacePtr<Interface> = Box<Interface>;
+
+pub type FactoryPtr<FactoryInterface> = Rc<FactoryInterface>;
+