use pyo3::exceptions::{PyRuntimeError, PyTypeError, PyValueError};
use pyo3::prelude::*;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum PyMinarrowError {
#[error("MinArrow error: {0}")]
Minarrow(#[from] minarrow::enums::error::MinarrowError),
#[error("FFI error: {0}")]
Ffi(String),
#[error("Type error: {0}")]
Type(String),
#[error("Unsupported type: {0}")]
UnsupportedType(String),
#[error("PyArrow error: {0}")]
PyArrow(String),
}
impl From<PyMinarrowError> for PyErr {
fn from(err: PyMinarrowError) -> PyErr {
match err {
PyMinarrowError::Type(msg) => PyTypeError::new_err(msg),
PyMinarrowError::UnsupportedType(msg) => PyTypeError::new_err(msg),
PyMinarrowError::Ffi(msg) => PyRuntimeError::new_err(msg),
PyMinarrowError::PyArrow(msg) => PyValueError::new_err(msg),
PyMinarrowError::Minarrow(e) => {
match e {
minarrow::enums::error::MinarrowError::TypeError { .. } => {
PyTypeError::new_err(e.to_string())
}
minarrow::enums::error::MinarrowError::IncompatibleTypeError { .. } => {
PyTypeError::new_err(e.to_string())
}
minarrow::enums::error::MinarrowError::IndexError(_) => {
pyo3::exceptions::PyIndexError::new_err(e.to_string())
}
minarrow::enums::error::MinarrowError::Overflow { .. } => {
pyo3::exceptions::PyOverflowError::new_err(e.to_string())
}
_ => PyRuntimeError::new_err(e.to_string()),
}
}
}
}
}
pub type PyMinarrowResult<T> = Result<T, PyMinarrowError>;