1use std::error::Error;
4use std::fmt::Debug;
5
6use arrow_schema::ArrowError;
7use thiserror::Error;
8
9#[derive(Error, Debug)]
11#[non_exhaustive]
12pub enum GeoArrowError {
13 #[error(transparent)]
15 Arrow(#[from] ArrowError),
16
17 #[error("CRS related error: {0}")]
19 Crs(String),
20
21 #[error("External error: {0}")]
23 External(#[from] Box<dyn Error + Send + Sync>),
24
25 #[error("FlatGeobuf error: {0}")]
27 FlatGeobuf(String),
28
29 #[error("GeoParquet error: {0}")]
31 GeoParquet(String),
32
33 #[error(transparent)]
35 IOError(#[from] std::io::Error),
36
37 #[error("Data not conforming to GeoArrow specification: {0}")]
39 InvalidGeoArrow(String),
40
41 #[error("Incorrect geometry type for operation: {0}")]
43 IncorrectGeometryType(String),
44
45 #[error("Overflow: data does not fit in i32 offsets.")]
49 Overflow,
50
51 #[error("WKB error: {0}")]
53 Wkb(String),
54
55 #[error("WKT error: {0}")]
57 Wkt(String),
58}
59
60pub type GeoArrowResult<T> = std::result::Result<T, GeoArrowError>;
62
63impl From<GeoArrowError> for ArrowError {
64 fn from(err: GeoArrowError) -> Self {
67 match err {
68 GeoArrowError::Arrow(err) => err,
69 _ => ArrowError::ExternalError(Box::new(err)),
70 }
71 }
72}