use crate::backend::database::DbError;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("{0}")]
Invalid(String),
#[error("{0}")]
NotFound(String),
#[error("{0}")]
Conflict(String),
#[error("git error: {0}")]
Git(String),
#[error("forge error: {0}")]
Forge(String),
#[error("database error: {0}")]
Database(String),
}
impl From<DbError> for Error {
fn from(error: DbError) -> Self {
match error {
DbError::InvalidInput(msg) => Self::Invalid(msg),
DbError::NotFound { entity, key } => {
Self::NotFound(format!("{entity} not found: {key}"))
}
DbError::Conflict(msg) => Self::Conflict(msg),
DbError::Database(err) => Self::Database(err.to_string()),
}
}
}
impl From<Error> for connectrpc::ConnectError {
fn from(error: Error) -> Self {
match error {
Error::Invalid(message) => Self::invalid_argument(message),
Error::NotFound(message) => Self::not_found(message),
Error::Conflict(message) => Self::failed_precondition(message),
Error::Git(message) | Error::Forge(message) | Error::Database(message) => {
Self::internal(message)
}
}
}
}