use std::fmt;
use crate::format::InputFormat;
#[derive(Debug)]
pub enum ConversionError {
Io(std::io::Error),
UnknownFormat { hint: String },
UnsupportedFormat(InputFormat),
Parse(String),
Streaming(String),
Browser(String),
}
impl fmt::Display for ConversionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ConversionError::Io(e) => write!(f, "i/o error: {e}"),
ConversionError::UnknownFormat { hint } => {
write!(f, "could not determine input format (hint: {hint})")
}
ConversionError::UnsupportedFormat(fmt) => {
write!(
f,
"no backend implemented yet for format '{}'",
fmt.as_str()
)
}
ConversionError::Parse(msg) => write!(f, "parse error: {msg}"),
ConversionError::Streaming(msg) => write!(f, "streaming not supported: {msg}"),
ConversionError::Browser(msg) => write!(f, "web-browser render error: {msg}"),
}
}
}
impl std::error::Error for ConversionError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
ConversionError::Io(e) => Some(e),
_ => None,
}
}
}
impl From<std::io::Error> for ConversionError {
fn from(e: std::io::Error) -> Self {
ConversionError::Io(e)
}
}