use pyo3::exceptions::{PyIndexError, PyOSError, PyRuntimeError, PyTimeoutError, PyValueError};
use pyo3::prelude::*;
use crate::{dataset::FetchError, error::Error, image::ImageError};
pub(crate) fn into_py_err(err: Error) -> PyErr {
let err = match err.downcast::<PyErr>() {
Ok(err) => return *err,
Err(err) => err,
};
if err.is::<ImageError>() {
return PyValueError::new_err(err.to_string());
}
let Some(fetch) = err.downcast_ref::<FetchError>() else {
return PyRuntimeError::new_err(err.to_string());
};
let message = err.to_string();
match fetch {
FetchError::OutOfRange { .. } => PyIndexError::new_err(message),
FetchError::TooLarge { .. } => PyValueError::new_err(message),
fetch if fetch.is_timeout() => PyTimeoutError::new_err(message),
_ => PyOSError::new_err(message),
}
}