aboutsummaryrefslogtreecommitdiff
path: root/src/private
diff options
context:
space:
mode:
Diffstat (limited to 'src/private')
-rw-r--r--src/private/castable_factory/threadsafe.rs71
-rw-r--r--src/private/factory.rs4
2 files changed, 6 insertions, 69 deletions
diff --git a/src/private/castable_factory/threadsafe.rs b/src/private/castable_factory/threadsafe.rs
index cb8a04b..6e608b1 100644
--- a/src/private/castable_factory/threadsafe.rs
+++ b/src/private/castable_factory/threadsafe.rs
@@ -11,7 +11,7 @@ where
DIContainerT: 'static,
ReturnInterface: 'static + ?Sized,
{
- func: &'static (dyn Fn<(Arc<DIContainerT>,), Output = TransientPtr<ReturnInterface>>
+ func: &'static (dyn Fn(Arc<DIContainerT>) -> TransientPtr<ReturnInterface>
+ Send
+ Sync),
}
@@ -38,44 +38,9 @@ where
DIContainerT: 'static,
ReturnInterface: 'static + ?Sized,
{
-}
-
-impl<ReturnInterface, DIContainerT> Fn<(Arc<DIContainerT>,)>
- for ThreadsafeCastableFactory<ReturnInterface, DIContainerT>
-where
- DIContainerT: 'static,
- ReturnInterface: 'static + ?Sized,
-{
- extern "rust-call" fn call(&self, args: (Arc<DIContainerT>,)) -> Self::Output
+ fn call(&self, di_container: Arc<DIContainerT>) -> TransientPtr<ReturnInterface>
{
- self.func.call(args)
- }
-}
-
-impl<ReturnInterface, DIContainerT> FnMut<(Arc<DIContainerT>,)>
- for ThreadsafeCastableFactory<ReturnInterface, DIContainerT>
-where
- DIContainerT: 'static,
- ReturnInterface: 'static + ?Sized,
-{
- extern "rust-call" fn call_mut(&mut self, args: (Arc<DIContainerT>,))
- -> Self::Output
- {
- self.call(args)
- }
-}
-
-impl<ReturnInterface, DIContainerT> FnOnce<(Arc<DIContainerT>,)>
- for ThreadsafeCastableFactory<ReturnInterface, DIContainerT>
-where
- DIContainerT: 'static,
- ReturnInterface: 'static + ?Sized,
-{
- type Output = TransientPtr<ReturnInterface>;
-
- extern "rust-call" fn call_once(self, args: (Arc<DIContainerT>,)) -> Self::Output
- {
- self.call(args)
+ (self.func)(di_container)
}
}
@@ -133,36 +98,8 @@ mod tests
let mock_di_container = Arc::new(MockAsyncDIContainer::new());
- let output = castable_factory.call((mock_di_container,));
+ let output = castable_factory.call(mock_di_container);
assert_eq!(output, TransientPtr::new(Bacon { heal_amount: 27 }));
}
-
- #[test]
- fn can_call_mut()
- {
- let mut castable_factory = ThreadsafeCastableFactory::new(&|_| {
- TransientPtr::new(Bacon { heal_amount: 1092 })
- });
-
- let mock_di_container = Arc::new(MockAsyncDIContainer::new());
-
- let output = castable_factory.call_mut((mock_di_container,));
-
- assert_eq!(output, TransientPtr::new(Bacon { heal_amount: 1092 }));
- }
-
- #[test]
- fn can_call_once()
- {
- let castable_factory = ThreadsafeCastableFactory::new(&|_| {
- TransientPtr::new(Bacon { heal_amount: 547 })
- });
-
- let mock_di_container = Arc::new(MockAsyncDIContainer::new());
-
- let output = castable_factory.call_once((mock_di_container,));
-
- assert_eq!(output, TransientPtr::new(Bacon { heal_amount: 547 }));
- }
}
diff --git a/src/private/factory.rs b/src/private/factory.rs
index 730338f..c1672e1 100644
--- a/src/private/factory.rs
+++ b/src/private/factory.rs
@@ -15,9 +15,9 @@ where
/// Interface for a threadsafe factory.
#[cfg(feature = "async")]
pub trait IThreadsafeFactory<ReturnInterface, DIContainerT>:
- Fn<(Arc<DIContainerT>,), Output = TransientPtr<ReturnInterface>>
- + crate::private::cast::CastFromArc
+ crate::private::cast::CastFromArc
where
ReturnInterface: 'static + ?Sized,
{
+ fn call(&self, di_container: Arc<DIContainerT>) -> TransientPtr<ReturnInterface>;
}