use pyo3::exceptions::{PyIOError, PyValueError};
use pyo3::PyErr;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DmapError {
#[error("{0}")]
CorruptStream(&'static str),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
BadCast(#[from] std::num::TryFromIntError),
#[error("{0}")]
InvalidKey(i8),
#[error("{0}")]
InvalidRecord(String),
#[error("{0}")]
InvalidScalar(String),
#[error("{0}")]
InvalidVector(String),
#[error("{0}")]
InvalidField(String),
#[error("First error: {1}\nRecords with errors: {0:?}")]
BadRecords(Vec<usize>, String),
}
impl From<DmapError> for PyErr {
fn from(value: DmapError) -> Self {
let msg = value.to_string();
match value {
DmapError::CorruptStream(..) => PyIOError::new_err(msg),
DmapError::Io(..) => PyIOError::new_err(msg),
_ => PyValueError::new_err(msg),
}
}
}