diff options
author | HampusM <hampus@hampusmat.com> | 2023-01-31 21:44:05 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2023-01-31 21:44:05 +0100 |
commit | 118651055b7844e04aa5b89023c385e483de305f (patch) | |
tree | 7386bf48a10732d9cadc7d19ed3d05fc0efd7b93 | |
parent | e8a2475b2f07da14c45a429b2b52e75322d0efb5 (diff) |
fix: remove unwrap from generated implementations of Injectable
-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, + }, } |