diff options
author | HampusM <hampus@hampusmat.com> | 2022-08-21 14:19:07 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-08-21 18:17:51 +0200 |
commit | 8c66b98bca6ed0a2990903fe8e0ea72def5c7be8 (patch) | |
tree | deed78171051262dba7e8d97eba73a9aaf04dd5e /src/errors/di_container.rs | |
parent | b3e1b993b028bbfa73638236cfbdb50ee478d3f0 (diff) |
refactor!: change errors to be more sane
BREAKING CHANGE: Major improvements have been made to error types and the error_stack crate is no longer used
Diffstat (limited to 'src/errors/di_container.rs')
-rw-r--r-- | src/errors/di_container.rs | 75 |
1 files changed, 51 insertions, 24 deletions
diff --git a/src/errors/di_container.rs b/src/errors/di_container.rs index 127676f..ed05a5e 100644 --- a/src/errors/di_container.rs +++ b/src/errors/di_container.rs @@ -1,34 +1,61 @@ -//! Error types for the DI container. +//! Error types for [`DIContainer`] and it's related structs. +//! +//! [`DIContainer`]: crate::di_container::DIContainer -use std::fmt; -use std::fmt::{Display, Formatter}; +use crate::errors::injectable::InjectableError; -use error_stack::Context; - -/// Error for when the DI container fails to do something. -#[derive(Debug)] -pub struct DIContainerError; - -impl Display for DIContainerError +/// Error type for [`DIContainer`]. +/// +/// [`DIContainer`]: crate::di_container::DIContainer +#[derive(thiserror::Error, Debug)] +pub enum DIContainerError { - fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result + /// Unable to cast a binding for a interface. + #[error("Unable to cast binding for interface '{0}'")] + CastFailed(&'static str), + + /// Wrong binding type. + #[error("Wrong binding type for interface '{interface}'. Expected a {expected}. Found a {found}")] + WrongBindingType { - fmt.write_str("A DI container error has occurred") - } -} + /// The affected bound interface. + interface: &'static str, -impl Context for DIContainerError {} + /// The expected binding type. + expected: &'static str, -/// Error for when the binding builder fails to do something. -#[derive(Debug)] -pub struct BindingBuilderError; + /// The found binding type. + found: String, + }, -impl Display for BindingBuilderError -{ - fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result + /// Failed to resolve a binding for a interface. + #[error("Failed to resolve binding for interface '{interface}'")] + BindingResolveFailed { - fmt.write_str("A binding builder error has occurred") - } + /// The reason for the problem. + #[source] + reason: InjectableError, + + /// The affected bound interface. + interface: &'static str, + }, + + /// No binding exists for a interface. + #[error("No binding exists for interface '{0}'")] + BindingNotFound(&'static str), } -impl Context for BindingBuilderError {} +/// Error type for [`BindingBuilder`]. +/// +/// [`BindingBuilder`]: crate::di_container::BindingBuilder +#[derive(thiserror::Error, Debug)] +pub enum BindingBuilderError +{ + /// A binding already exists for a interface. + #[error("Binding already exists for interface '{0}'")] + BindingAlreadyExists(&'static str), + + /// Resolving a singleton failed. + #[error("Resolving the given singleton failed")] + SingletonResolveFailed(#[from] InjectableError), +} |