use std::error::Error;
use std::fmt;
pub type Result<T> = std::result::Result<T, XDocErr>;
#[derive(Debug)]
pub struct XDocErr {
pub message: String,
pub file: String,
pub line: u64,
pub source: Option<Box<dyn Error + Sync + Send + 'static>>,
}
impl fmt::Display for XDocErr {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if let Some(src) = &self.source {
write!(
f,
"{}:{} {}: {}",
self.file,
self.line,
self.message,
src.as_ref()
)
} else {
write!(f, "{}:{} {}", self.file, self.line, self.message)
}
}
}
impl Error for XDocErr {
fn source(&self) -> Option<&(dyn Error + 'static)> {
if let Some(src) = &self.source {
return Some(src.as_ref());
}
None
}
}