From aa548ded39c7ba1927019c748c359523b21d59e8 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 29 Oct 2022 14:38:51 +0200 Subject: refactor!: add dependency history type BREAKING CHANGE: Binding builders & configurators now take dependency history type arguments, the DetectedCircular variant of InjectableError now contains a dependency history field & the injectable traits take dependency history instead of a Vec --- src/interfaces/async_injectable.rs | 14 +++++++++----- src/interfaces/injectable.rs | 14 +++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'src/interfaces') diff --git a/src/interfaces/async_injectable.rs b/src/interfaces/async_injectable.rs index fb7f8ba..4e614a3 100644 --- a/src/interfaces/async_injectable.rs +++ b/src/interfaces/async_injectable.rs @@ -2,6 +2,7 @@ use std::fmt::Debug; use std::sync::Arc; +use crate::dependency_history::IDependencyHistory; use crate::di_container::asynchronous::IAsyncDIContainer; use crate::errors::injectable::InjectableError; use crate::future::BoxFuture; @@ -9,9 +10,10 @@ use crate::libs::intertrait::CastFromSync; use crate::ptr::TransientPtr; /// Interface for structs that can be injected into or be injected to. -pub trait AsyncInjectable: CastFromSync +pub trait AsyncInjectable: CastFromSync where - DIContainerType: IAsyncDIContainer, + DIContainerType: IAsyncDIContainer, + DependencyHistoryType: IDependencyHistory + Send + Sync, { /// Resolves the dependencies of the injectable. /// @@ -19,16 +21,18 @@ where /// Will return `Err` if resolving the dependencies fails. fn resolve<'di_container, 'fut>( di_container: &'di_container Arc, - dependency_history: Vec<&'static str>, + dependency_history: DependencyHistoryType, ) -> BoxFuture<'fut, Result, InjectableError>> where Self: Sized + 'fut, 'di_container: 'fut; } -impl Debug for dyn AsyncInjectable +impl Debug + for dyn AsyncInjectable where - DIContainerType: IAsyncDIContainer, + DIContainerType: IAsyncDIContainer, + DependencyHistoryType: IDependencyHistory + Send + Sync, { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/src/interfaces/injectable.rs b/src/interfaces/injectable.rs index 132935d..6130d2b 100644 --- a/src/interfaces/injectable.rs +++ b/src/interfaces/injectable.rs @@ -2,15 +2,17 @@ use std::fmt::Debug; use std::rc::Rc; +use crate::dependency_history::IDependencyHistory; use crate::di_container::blocking::IDIContainer; use crate::errors::injectable::InjectableError; use crate::libs::intertrait::CastFrom; use crate::ptr::TransientPtr; /// Interface for structs that can be injected into or be injected to. -pub trait Injectable: CastFrom +pub trait Injectable: CastFrom where - DIContainerType: IDIContainer, + DIContainerType: IDIContainer, + DependencyHistoryType: IDependencyHistory, { /// Resolves the dependencies of the injectable. /// @@ -18,15 +20,17 @@ where /// Will return `Err` if resolving the dependencies fails. fn resolve( di_container: &Rc, - dependency_history: Vec<&'static str>, + dependency_history: DependencyHistoryType, ) -> Result, InjectableError> where Self: Sized; } -impl Debug for dyn Injectable +impl Debug + for dyn Injectable where - DIContainerType: IDIContainer, + DIContainerType: IDIContainer, + DependencyHistoryType: IDependencyHistory, { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { -- cgit v1.2.3-18-g5258