use std::fmt;
#[derive(Debug, thiserror::Error)]
pub enum CsvMdError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("CSV parsing error at {location}: {message}")]
Csv {
message: String,
location: String,
},
#[error("Formatting error: {0}")]
Fmt(#[from] fmt::Error),
}
impl From<csv::Error> for CsvMdError {
fn from(err: csv::Error) -> Self {
let location = match err.position() {
Some(pos) => format!("line {}, record {}", pos.line(), pos.record()),
None => "unknown location".to_string(),
};
CsvMdError::Csv {
message: err.to_string(),
location,
}
}
}
pub type Result<T> = std::result::Result<T, CsvMdError>;