aboutsummaryrefslogtreecommitdiff
path: root/syrette/src/castable_factory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'syrette/src/castable_factory.rs')
-rw-r--r--syrette/src/castable_factory.rs38
1 files changed, 21 insertions, 17 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,
{
}