diff options
author | HampusM <hampus@hampusmat.com> | 2022-09-03 11:49:49 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-09-03 11:49:49 +0200 |
commit | ea0309436b55d72f57478ed6f74bf31d000f5366 (patch) | |
tree | f8dfade30d9aac7e982cdd957dc609f337889598 | |
parent | 40109b5298160795cedca4c8204c8a1dd0bcd0be (diff) |
refactor: improve DI container cast errors
-rw-r--r-- | src/di_container.rs | 15 | ||||
-rw-r--r-- | src/errors/di_container.rs | 13 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/di_container.rs b/src/di_container.rs index b0e5af1..df95be4 100644 --- a/src/di_container.rs +++ b/src/di_container.rs @@ -384,12 +384,18 @@ impl DIContainer match binding_providable { Providable::Transient(transient_binding) => Ok(SomePtr::Transient( transient_binding.cast::<Interface>().map_err(|_| { - DIContainerError::CastFailed(type_name::<Interface>()) + DIContainerError::CastFailed { + interface: type_name::<Interface>(), + binding_kind: "transient", + } })?, )), Providable::Singleton(singleton_binding) => Ok(SomePtr::Singleton( singleton_binding.cast::<Interface>().map_err(|_| { - DIContainerError::CastFailed(type_name::<Interface>()) + DIContainerError::CastFailed { + interface: type_name::<Interface>(), + binding_kind: "singleton", + } })?, )), #[cfg(feature = "factory")] @@ -401,8 +407,9 @@ impl DIContainer let default_factory = factory_binding .cast::<dyn IFactory<(), Interface>>() - .map_err(|_| { - DIContainerError::CastFailed(type_name::<Interface>()) + .map_err(|_| DIContainerError::CastFailed { + interface: type_name::<Interface>(), + binding_kind: "factory", })?; Ok(SomePtr::Transient(default_factory())) diff --git a/src/errors/di_container.rs b/src/errors/di_container.rs index 82a3d55..5e53f43 100644 --- a/src/errors/di_container.rs +++ b/src/errors/di_container.rs @@ -11,8 +11,17 @@ use crate::errors::injectable::InjectableError; pub enum DIContainerError { /// Unable to cast a binding for a interface. - #[error("Unable to cast binding for interface '{0}'")] - CastFailed(&'static str), + #[error( + "Unable to cast binding for interface '{interface} with kind '{binding_kind}'" + )] + CastFailed + { + /// The interface. + interface: &'static str, + + /// The kind of the found binding. + binding_kind: &'static str, + }, /// Failed to resolve a binding for a interface. #[error("Failed to resolve binding for interface '{interface}'")] |