use std::fmt;
#[derive(Debug)]
pub enum OxiSqlError {
Parse(String),
Execution(String),
NotConnected,
TypeMismatch {
expected: &'static str,
got: &'static str,
},
ConstraintViolation(String),
Timeout(String),
ConnectionPool(String),
Migration(String),
UnsupportedUri(String),
Params(String),
Other(String),
}
impl fmt::Display for OxiSqlError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
OxiSqlError::Parse(s) => write!(f, "SQL parse error: {s}"),
OxiSqlError::Execution(s) => write!(f, "execution error: {s}"),
OxiSqlError::NotConnected => write!(f, "not connected"),
OxiSqlError::TypeMismatch { expected, got } => {
write!(f, "type mismatch: expected {expected}, got {got}")
}
OxiSqlError::ConstraintViolation(s) => {
write!(f, "constraint violation: {s}")
}
OxiSqlError::Timeout(s) => write!(f, "timeout: {s}"),
OxiSqlError::ConnectionPool(s) => write!(f, "connection pool error: {s}"),
OxiSqlError::Migration(s) => write!(f, "migration error: {s}"),
OxiSqlError::UnsupportedUri(s) => write!(f, "unsupported URI or feature: {s}"),
OxiSqlError::Params(s) => write!(f, "parameter binding error: {s}"),
OxiSqlError::Other(s) => write!(f, "error: {s}"),
}
}
}
impl std::error::Error for OxiSqlError {}