use std::fmt;
#[derive(Debug)]
#[non_exhaustive]
pub enum PlotError {
SeriesLengthMismatch {
expected: usize,
got: usize,
},
EmptyData,
UnknownColumn(String),
Io(std::io::Error),
UnsupportedFormat(String),
FontLoad(String),
}
impl fmt::Display for PlotError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::SeriesLengthMismatch { expected, got } =>
write!(f, "series length mismatch: expected {expected}, got {got}"),
Self::EmptyData => write!(f, "data series is empty"),
Self::UnknownColumn(name) => write!(f, "unknown column: {name}"),
Self::Io(err) => write!(f, "I/O error: {err}"),
Self::UnsupportedFormat(fmt_str) => write!(f, "unsupported format: {fmt_str}"),
Self::FontLoad(msg) => write!(f, "font loading error: {msg}"),
}
}
}
impl std::error::Error for PlotError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Io(err) => Some(err),
_ => None,
}
}
}
impl From<std::io::Error> for PlotError {
fn from(err: std::io::Error) -> Self {
Self::Io(err)
}
}
pub type Result<T> = std::result::Result<T, PlotError>;