use std::error::Error as StdError;
use thiserror::Error;
pub type IngestionResult<T> = Result<T, IngestionError>;
#[derive(Debug, Error)]
pub enum IngestionError {
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[cfg(feature = "excel")]
#[error("excel error: {0}")]
Excel(#[from] calamine::Error),
#[error("csv error: {0}")]
Csv(#[from] csv::Error),
#[error("parquet error: {0}")]
Parquet(#[from] parquet::errors::ParquetError),
#[error("{message}: {source}")]
Engine {
message: String,
#[source]
source: Box<dyn StdError + Send + Sync + 'static>,
},
#[error("schema mismatch: {message}")]
SchemaMismatch { message: String },
#[error("failed to parse value at row {row} column '{column}': {message} (raw='{raw}')")]
ParseError {
row: usize,
column: String,
raw: String,
message: String,
},
}