use std::error::Error;
use std::fmt::Debug;
use arrow_schema::ArrowError;
use thiserror::Error;
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum GeoArrowError {
#[error(transparent)]
Arrow(#[from] ArrowError),
#[error("CRS related error: {0}")]
Crs(String),
#[error("External error: {0}")]
External(#[from] Box<dyn Error + Send + Sync>),
#[error("FlatGeobuf error: {0}")]
FlatGeobuf(String),
#[error("GeoParquet error: {0}")]
GeoParquet(String),
#[error(transparent)]
IOError(#[from] std::io::Error),
#[error("Data not conforming to GeoArrow specification: {0}")]
InvalidGeoArrow(String),
#[error("Incorrect geometry type for operation: {0}")]
IncorrectGeometryType(String),
#[error("Overflow: data does not fit in i32 offsets.")]
Overflow,
#[error("WKB error: {0}")]
Wkb(String),
#[error("WKT error: {0}")]
Wkt(String),
}
pub type GeoArrowResult<T> = std::result::Result<T, GeoArrowError>;
impl From<GeoArrowError> for ArrowError {
fn from(err: GeoArrowError) -> Self {
match err {
GeoArrowError::Arrow(err) => err,
_ => ArrowError::ExternalError(Box::new(err)),
}
}
}