use datafusion::error::DataFusionError;
use iceberg_rust::error::Error as IcebergError;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error(transparent)]
Datafusion(#[from] datafusion::error::DataFusionError),
#[error(transparent)]
Arrow(#[from] datafusion::arrow::error::ArrowError),
#[error(transparent)]
SQLParser(#[from] datafusion::sql::sqlparser::parser::ParserError),
#[error(transparent)]
Iceberg(#[from] iceberg_rust::error::Error),
#[error(transparent)]
IcebergSpec(#[from] iceberg_rust::spec::error::Error),
#[error(transparent)]
JSONSerde(#[from] serde_json::Error),
#[error(transparent)]
Chrono(#[from] chrono::ParseError),
#[error(transparent)]
IO(#[from] std::io::Error),
#[error(transparent)]
FuturesChannel(#[from] futures::channel::mpsc::SendError),
#[error(transparent)]
ObjectStore(#[from] object_store::Error),
#[error(transparent)]
TryFromSlice(#[from] std::array::TryFromSliceError),
#[error(transparent)]
TryFromInt(#[from] std::num::TryFromIntError),
#[error(transparent)]
UTF8(#[from] std::str::Utf8Error),
#[error(transparent)]
FromUTF8(#[from] std::string::FromUtf8Error),
#[error(transparent)]
ParseInt(#[from] std::num::ParseIntError),
#[error(transparent)]
ConfigBuilder(#[from] crate::table::DataFusionTableConfigBuilderError),
}
impl From<Error> for DataFusionError {
fn from(value: Error) -> Self {
DataFusionError::External(Box::new(value))
}
}
impl From<Error> for IcebergError {
fn from(value: Error) -> Self {
IcebergError::External(Box::new(value))
}
}