1use numpy::BorrowError;
4use pyo3::exceptions::{PyException, PyValueError};
5use pyo3::prelude::*;
6use pyo3::CastError;
7use thiserror::Error;
8
9#[derive(Error, Debug)]
11#[non_exhaustive]
12pub enum PyArrowError {
13 #[error(transparent)]
15 ArrowError(#[from] arrow_schema::ArrowError),
16
17 #[error(transparent)]
19 PyErr(#[from] PyErr),
20
21 #[error(transparent)]
23 NumpyBorrowError(#[from] BorrowError),
24}
25
26impl From<PyArrowError> for PyErr {
27 fn from(error: PyArrowError) -> Self {
28 match error {
29 PyArrowError::PyErr(err) => err,
30 PyArrowError::ArrowError(err) => PyException::new_err(err.to_string()),
31 PyArrowError::NumpyBorrowError(err) => PyException::new_err(err.to_string()),
32 }
33 }
34}
35
36impl<'a, 'py> From<CastError<'a, 'py>> for PyArrowError {
37 fn from(other: CastError<'a, 'py>) -> Self {
38 Self::PyErr(PyValueError::new_err(format!(
39 "Could not downcast: {}",
40 other
41 )))
42 }
43}
44
45pub type PyArrowResult<T> = Result<T, PyArrowError>;