use thiserror::Error;
use crate::domain::errors::DomainError;
#[derive(Debug, Error)]
pub enum ApplicationError {
#[error(transparent)]
Domain(#[from] DomainError),
#[error(transparent)]
Storage(#[from] StorageError),
#[error(transparent)]
NotFound(#[from] NotFoundError),
#[error(transparent)]
Delivery(#[from] DeliveryError),
#[error("invalid input: {0}")]
InvalidInput(String),
}
#[derive(Debug, Error)]
#[error("storage error: {0}")]
pub struct StorageError(pub String);
#[derive(Debug, Error, PartialEq, Eq)]
#[error("not found")]
pub struct NotFoundError;
#[derive(Debug, Error, PartialEq, Eq)]
#[error("conflict")]
pub struct ConflictError;
#[derive(Debug, Error)]
#[error("delivery failed: {0}")]
pub struct DeliveryError(pub String);