aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/async_injectable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/async_injectable.rs')
-rw-r--r--src/interfaces/async_injectable.rs30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/interfaces/async_injectable.rs b/src/interfaces/async_injectable.rs
index 3600bac..cf903e7 100644
--- a/src/interfaces/async_injectable.rs
+++ b/src/interfaces/async_injectable.rs
@@ -1,17 +1,19 @@
//! Interface for structs that can be injected into or be injected to.
use std::fmt::Debug;
use std::future::ready;
+use std::rc::Rc;
+use std::sync::Arc;
use crate::errors::injectable::InjectableError;
use crate::future::BoxFuture;
-use crate::private::cast::CastFromArc;
use crate::ptr::TransientPtr;
+use crate::ptr_buffer::PtrBuffer;
use crate::util::use_double;
use_double!(crate::dependency_history::DependencyHistory);
/// Interface for structs that can be injected into or be injected to.
-pub trait AsyncInjectable<DIContainerT>: CastFromArc
+pub trait AsyncInjectable<DIContainerT>: 'static + Send + Sync
{
/// Resolves the dependencies of the injectable.
///
@@ -24,6 +26,15 @@ pub trait AsyncInjectable<DIContainerT>: CastFromArc
where
Self: Sized + 'fut,
'di_container: 'fut;
+
+ /// A.
+ fn into_ptr_buffer_box(self: Box<Self>) -> PtrBuffer;
+
+ /// A.
+ fn into_ptr_buffer_rc(self: Rc<Self>) -> PtrBuffer;
+
+ /// A.
+ fn into_ptr_buffer_arc(self: Arc<Self>) -> PtrBuffer;
}
impl<DIContainerT> Debug for dyn AsyncInjectable<DIContainerT>
@@ -48,4 +59,19 @@ where
{
Box::pin(ready(Ok(TransientPtr::new(Self::default()))))
}
+
+ fn into_ptr_buffer_box(self: Box<Self>) -> PtrBuffer
+ {
+ PtrBuffer::new_from(self)
+ }
+
+ fn into_ptr_buffer_rc(self: Rc<Self>) -> PtrBuffer
+ {
+ PtrBuffer::new_from(self)
+ }
+
+ fn into_ptr_buffer_arc(self: Arc<Self>) -> PtrBuffer
+ {
+ PtrBuffer::new_from(self)
+ }
}