From e0d399133b0c06011c9b775fd545ce649be37ff4 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 1 Oct 2023 22:15:28 +0200 Subject: feat: implement Injectable & AsyncInjectable for Default types --- src/interfaces/async_injectable.rs | 17 +++++++++++++++++ src/interfaces/injectable.rs | 13 +++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/interfaces/async_injectable.rs b/src/interfaces/async_injectable.rs index 4c18487..3600bac 100644 --- a/src/interfaces/async_injectable.rs +++ b/src/interfaces/async_injectable.rs @@ -1,5 +1,6 @@ //! Interface for structs that can be injected into or be injected to. use std::fmt::Debug; +use std::future::ready; use crate::errors::injectable::InjectableError; use crate::future::BoxFuture; @@ -32,3 +33,19 @@ impl Debug for dyn AsyncInjectable f.write_str("{}") } } + +impl AsyncInjectable for T +where + T: Default + 'static + Send + Sync, +{ + fn resolve<'di_container, 'fut>( + _: &'di_container DIContainerT, + _: DependencyHistory, + ) -> BoxFuture<'fut, Result, InjectableError>> + where + Self: Sized + 'fut, + 'di_container: 'fut, + { + Box::pin(ready(Ok(TransientPtr::new(Self::default())))) + } +} diff --git a/src/interfaces/injectable.rs b/src/interfaces/injectable.rs index d82f042..1d3a1a7 100644 --- a/src/interfaces/injectable.rs +++ b/src/interfaces/injectable.rs @@ -30,3 +30,16 @@ impl Debug for dyn Injectable f.write_str("{}") } } + +impl Injectable for T +where + T: Default + 'static, +{ + fn resolve( + _: &DIContainerT, + _: DependencyHistory, + ) -> Result, InjectableError> + { + Ok(TransientPtr::new(Self::default())) + } +} -- cgit v1.2.3-18-g5258