diff options
-rw-r--r-- | macros/src/injectable/implementation.rs | 14 | ||||
-rw-r--r-- | src/errors/injectable.rs | 13 |
2 files changed, 23 insertions, 4 deletions
diff --git a/macros/src/injectable/implementation.rs b/macros/src/injectable/implementation.rs index e81dd2d..30132bf 100644 --- a/macros/src/injectable/implementation.rs +++ b/macros/src/injectable/implementation.rs @@ -430,10 +430,16 @@ impl<Dep: IDependency> InjectableImpl<Dep> }; Ok(quote! { - #do_method_call.map_err(|err| #resolve_failed_error { - reason: Box::new(err), - affected: self_type_name - })?.#to_ptr().unwrap() + #do_method_call + .map_err(|err| #resolve_failed_error { + reason: Box::new(err), + affected: self_type_name + })? + .#to_ptr() + .map_err(|err| InjectableError:: PrepareDependencyFailed { + reason: err, + dependency_name: #dep_interface_str + })? }) } diff --git a/src/errors/injectable.rs b/src/errors/injectable.rs index f132063..f040062 100644 --- a/src/errors/injectable.rs +++ b/src/errors/injectable.rs @@ -4,6 +4,7 @@ use crate::dependency_history::DependencyHistory; use crate::errors::di_container::DIContainerError; +use crate::errors::ptr::SomePtrError; /// Error type for structs that implement [`Injectable`]. /// @@ -42,4 +43,16 @@ pub enum InjectableError /// History of dependencies. dependency_history: DependencyHistory, }, + + /// Failed to prepare a dependency. + #[error("Failed to prepare dependency '{dependency_name}'")] + PrepareDependencyFailed + { + /// Error reason. + #[source] + reason: SomePtrError, + + /// The name of the dependency. + dependency_name: &'static str, + }, } |