diff options
| author | HampusM <hampus@hampusmat.com> | 2022-10-29 14:38:51 +0200 | 
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2022-10-29 14:40:11 +0200 | 
| commit | aa548ded39c7ba1927019c748c359523b21d59e8 (patch) | |
| tree | 779d104f85009dd831e6af6e7a523258a1ab5be9 /macros/src/injectable/implementation.rs | |
| parent | da94fd3b7dd2265f10957d0f5276881beb057d82 (diff) | |
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
Diffstat (limited to 'macros/src/injectable/implementation.rs')
| -rw-r--r-- | macros/src/injectable/implementation.rs | 26 | 
1 files changed, 13 insertions, 13 deletions
| diff --git a/macros/src/injectable/implementation.rs b/macros/src/injectable/implementation.rs index 6cde446..cfbc620 100644 --- a/macros/src/injectable/implementation.rs +++ b/macros/src/injectable/implementation.rs @@ -101,19 +101,17 @@ impl<Dep: IDependency> InjectableImpl<Dep>      ) -> proc_macro2::TokenStream      {          quote! { -            if #dependency_history_var.contains(&self_type_name) { -                #dependency_history_var.push(self_type_name); +            use syrette::dependency_history::IDependencyHistory; -                let dependency_trace = -                    syrette::dependency_trace::create_dependency_trace( -                        #dependency_history_var.as_slice(), -                        self_type_name -                    ); +            if #dependency_history_var.contains::<Self>() { +                #dependency_history_var.push::<Self>(); -                return Err(InjectableError::DetectedCircular {dependency_trace }); +                return Err(InjectableError::DetectedCircular { +                    dependency_history: #dependency_history_var +                });              } -            #dependency_history_var.push(self_type_name); +            #dependency_history_var.push::<Self>();          }      } @@ -133,14 +131,15 @@ impl<Dep: IDependency> InjectableImpl<Dep>          quote! {              #maybe_doc_hidden              impl #generics syrette::interfaces::async_injectable::AsyncInjectable< -                syrette::di_container::asynchronous::AsyncDIContainer +                syrette::di_container::asynchronous::AsyncDIContainer, +                syrette::dependency_history::DependencyHistory              > for #self_type              {                  fn resolve<'di_container, 'fut>(                      #di_container_var: &'di_container std::sync::Arc<                          syrette::di_container::asynchronous::AsyncDIContainer                      >, -                    mut #dependency_history_var: Vec<&'static str>, +                    mut #dependency_history_var: syrette::dependency_history::DependencyHistory                  ) -> syrette::future::BoxFuture<                      'fut,                      Result< @@ -187,14 +186,15 @@ impl<Dep: IDependency> InjectableImpl<Dep>          quote! {              #maybe_doc_hidden              impl #generics syrette::interfaces::injectable::Injectable< -                syrette::di_container::blocking::DIContainer +                syrette::di_container::blocking::DIContainer, +                syrette::dependency_history::DependencyHistory              > for #self_type              {                  fn resolve(                      #di_container_var: &std::rc::Rc<                          syrette::di_container::blocking::DIContainer                      >, -                    mut #dependency_history_var: Vec<&'static str>, +                    mut #dependency_history_var: syrette::dependency_history::DependencyHistory                  ) -> Result<                      syrette::ptr::TransientPtr<Self>,                      syrette::errors::injectable::InjectableError> | 
