use crate::{catalog::error::CatalogError, storage::StorageError};
#[derive(Debug, Clone, PartialEq)]
pub enum ExecutionError {
Catalog(CatalogError),
Storage(String),
}
impl From<CatalogError> for ExecutionError {
fn from(e: CatalogError) -> Self {
ExecutionError::Catalog(e)
}
}
impl From<StorageError> for ExecutionError {
fn from(e: StorageError) -> Self {
ExecutionError::Storage(e.to_string())
}
}
impl std::fmt::Display for ExecutionError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ExecutionError::Catalog(e) => write!(f, "catalog error: {}", e),
ExecutionError::Storage(msg) => write!(f, "storage error: {}", msg),
}
}
}
impl ExecutionError {
pub fn format(&self, interner: &crate::common::Interner) -> String {
match self {
ExecutionError::Catalog(e) => format!("catalog error: {}", e.format(interner)),
ExecutionError::Storage(msg) => format!("storage error: {}", msg),
}
}
}
impl std::error::Error for ExecutionError {}