use sqlx::Error; use std::borrow::Cow; #[derive(Debug, thiserror::Error)] pub enum DatabaseError { #[error("Record not found")] RecordNotFound, #[error(transparent)] UnexpectedData(#[from] validator::ValidationErrors), #[error(transparent)] IOError(#[from] std::io::Error), #[error(transparent)] UuidError(#[from] uuid::Error), #[error("Storage space not enough")] StorageSpaceNotEnough, #[error("Bucket error:{0}")] BucketError(String), #[error(transparent)] Internal(#[from] anyhow::Error), } impl DatabaseError { pub fn is_not_found(&self) -> bool { matches!(self, Self::RecordNotFound) } } impl From for DatabaseError { fn from(value: sqlx::Error) -> Self { match value { Error::RowNotFound => DatabaseError::RecordNotFound, _ => DatabaseError::Internal(value.into()), } } } impl From for Cow<'static, str> { fn from(value: DatabaseError) -> Self { Cow::Owned(format!("{:?}", value)) } }