use std::fmt;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug)]
pub enum Error {
Configuration(String),
Xml(roxmltree::Error),
UnsupportedXml(&'static str),
Field {
name: String,
path: String,
message: String,
},
BatchFull,
Arrow(arrow_schema::ArrowError),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Configuration(message) => write!(f, "invalid configuration: {message}"),
Self::Xml(source) => write!(f, "XML: {source}"),
Self::UnsupportedXml(message) => write!(f, "unsupported XML: {message}"),
Self::Field {
name,
path,
message,
} => write!(f, "field {name:?} at {path:?}: {message}"),
Self::BatchFull => f.write_str("batch is full; flush before appending"),
Self::Arrow(source) => write!(f, "Arrow: {source}"),
}
}
}
impl std::error::Error for Error {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Xml(source) => Some(source),
Self::Arrow(source) => Some(source),
_ => None,
}
}
}
impl From<roxmltree::Error> for Error {
fn from(source: roxmltree::Error) -> Self {
Self::Xml(source)
}
}
impl From<arrow_schema::ArrowError> for Error {
fn from(source: arrow_schema::ArrowError) -> Self {
Self::Arrow(source)
}
}