geoarrow_schema/
error.rs

1//! Defines [`GeoArrowError`], representing all errors returned by this crate.
2
3use std::error::Error;
4use std::fmt::Debug;
5
6use arrow_schema::ArrowError;
7use thiserror::Error;
8
9/// Enum with all errors in this crate.
10#[derive(Error, Debug)]
11#[non_exhaustive]
12pub enum GeoArrowError {
13    /// [ArrowError]
14    #[error(transparent)]
15    Arrow(#[from] ArrowError),
16
17    /// CRS error
18    #[error("CRS related error: {0}")]
19    Crs(String),
20
21    /// Wraps an external error.
22    #[error("External error: {0}")]
23    External(#[from] Box<dyn Error + Send + Sync>),
24
25    /// FlatGeobuf error
26    #[error("FlatGeobuf error: {0}")]
27    FlatGeobuf(String),
28
29    /// GeoParquet error
30    #[error("GeoParquet error: {0}")]
31    GeoParquet(String),
32
33    /// [std::io::Error]
34    #[error(transparent)]
35    IOError(#[from] std::io::Error),
36
37    /// Invalid data not conforming to GeoArrow specification
38    #[error("Data not conforming to GeoArrow specification: {0}")]
39    InvalidGeoArrow(String),
40
41    /// Incorrect geometry type for operation
42    #[error("Incorrect geometry type for operation: {0}")]
43    IncorrectGeometryType(String),
44
45    /// Whenever pushing to a container fails because it does not support more entries.
46    ///
47    /// The solution is usually to use a higher-capacity container-backing type.
48    #[error("Overflow: data does not fit in i32 offsets.")]
49    Overflow,
50
51    /// WKB Error
52    #[error("WKB error: {0}")]
53    Wkb(String),
54
55    /// WKT Error
56    #[error("WKT error: {0}")]
57    Wkt(String),
58}
59
60/// Crate-specific result type.
61pub type GeoArrowResult<T> = std::result::Result<T, GeoArrowError>;
62
63impl From<GeoArrowError> for ArrowError {
64    /// Many APIs where we pass in a callback into the Arrow crate require the returned error type
65    /// to be ArrowError, so implementing this `From` makes the conversion less verbose there.
66    fn from(err: GeoArrowError) -> Self {
67        match err {
68            GeoArrowError::Arrow(err) => err,
69            _ => ArrowError::ExternalError(Box::new(err)),
70        }
71    }
72}