diff options
author | HampusM <hampus@hampusmat.com> | 2023-09-18 22:35:58 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2023-09-18 22:35:58 +0200 |
commit | 4fd0d6b4951b08a20d5378bca75561109dc6d036 (patch) | |
tree | 8496d679e7ee3debcd415ed563911e2166594212 /src/private | |
parent | de2e1349f459f7f69226b2decd366be690426ea7 (diff) |
refactor!: make the async DI container not inside a Arc
BREAKING CHANGE: The async DI container is no longer inside of a Arc. This affects AsyncBindingBuilder, AsyncBindingScopeConfigurator, AsyncBindingWhenConfigurator & AsyncInjectable
Diffstat (limited to 'src/private')
-rw-r--r-- | src/private/castable_factory/threadsafe.rs | 22 | ||||
-rw-r--r-- | src/private/factory.rs | 5 |
2 files changed, 11 insertions, 16 deletions
diff --git a/src/private/castable_factory/threadsafe.rs b/src/private/castable_factory/threadsafe.rs index 6e608b1..6e8da42 100644 --- a/src/private/castable_factory/threadsafe.rs +++ b/src/private/castable_factory/threadsafe.rs @@ -1,6 +1,5 @@ use std::any::type_name; use std::fmt::Debug; -use std::sync::Arc; use crate::private::any_factory::{AnyFactory, AnyThreadsafeFactory}; use crate::private::factory::IThreadsafeFactory; @@ -11,9 +10,7 @@ where DIContainerT: 'static, ReturnInterface: 'static + ?Sized, { - func: &'static (dyn Fn(Arc<DIContainerT>) -> TransientPtr<ReturnInterface> - + Send - + Sync), + func: &'static (dyn Fn(&DIContainerT) -> TransientPtr<ReturnInterface> + Send + Sync), } impl<ReturnInterface, DIContainerT> @@ -23,7 +20,7 @@ where ReturnInterface: 'static + ?Sized, { pub fn new( - func: &'static (dyn Fn<(Arc<DIContainerT>,), Output = TransientPtr<ReturnInterface>> + func: &'static (dyn Fn(&DIContainerT) -> TransientPtr<ReturnInterface> + Send + Sync), ) -> Self @@ -38,7 +35,7 @@ where DIContainerT: 'static, ReturnInterface: 'static + ?Sized, { - fn call(&self, di_container: Arc<DIContainerT>) -> TransientPtr<ReturnInterface> + fn call(&self, di_container: &DIContainerT) -> TransientPtr<ReturnInterface> { (self.func)(di_container) } @@ -72,7 +69,7 @@ where let ret = type_name::<TransientPtr<ReturnInterface>>(); formatter.write_fmt(format_args!( - "ThreadsafeCastableFactory (Arc<AsyncDIContainer>) -> {ret} {{ ... }}", + "ThreadsafeCastableFactory (&AsyncDIContainer) -> {ret} {{ ... }}", )) } } @@ -92,13 +89,14 @@ mod tests #[test] fn can_call() { - let castable_factory = ThreadsafeCastableFactory::new(&|_| { - TransientPtr::new(Bacon { heal_amount: 27 }) - }); + let castable_factory = + ThreadsafeCastableFactory::new(&|_: &MockAsyncDIContainer| { + TransientPtr::new(Bacon { heal_amount: 27 }) + }); - let mock_di_container = Arc::new(MockAsyncDIContainer::new()); + let mock_di_container = 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 })); } diff --git a/src/private/factory.rs b/src/private/factory.rs index c1672e1..7191c2c 100644 --- a/src/private/factory.rs +++ b/src/private/factory.rs @@ -1,6 +1,3 @@ -#[cfg(feature = "async")] -use std::sync::Arc; - use crate::private::cast::CastFrom; use crate::ptr::TransientPtr; @@ -19,5 +16,5 @@ pub trait IThreadsafeFactory<ReturnInterface, DIContainerT>: where ReturnInterface: 'static + ?Sized, { - fn call(&self, di_container: Arc<DIContainerT>) -> TransientPtr<ReturnInterface>; + fn call(&self, di_container: &DIContainerT) -> TransientPtr<ReturnInterface>; } |