iceberg_rust/
error.rs

1/*!
2Error type for iceberg
3*/
4
5use arrow::error::ArrowError;
6use thiserror::Error;
7
8#[derive(Error, Debug)]
9/// Iceberg error
10pub enum Error {
11    /// Invalid format
12    #[error("{0} doesn't have the right format")]
13    InvalidFormat(String),
14    /// Type error
15    #[error("Value {0} doesn't have the {1} type.")]
16    Type(String, String),
17    /// Schema error
18    #[error("Column {0} not in schema {1}.")]
19    Schema(String, String),
20    /// Conversion error
21    #[error("Failed to convert {0} to {1}.")]
22    Conversion(String, String),
23    /// Not found
24    #[error("{0} not found.")]
25    NotFound(String),
26    /// Not supported
27    #[error("Feature {0} is not supported.")]
28    NotSupported(String),
29    /// Not found in catalog
30    #[error("Entity not found in catalog")]
31    CatalogNotFound,
32    /// External error
33    #[error(transparent)]
34    External(Box<dyn std::error::Error + Send + Sync>),
35    /// Iceberg spec error
36    #[error(transparent)]
37    Iceberg(#[from] iceberg_rust_spec::error::Error),
38    /// Arrow error
39    #[error(transparent)]
40    Arrow(#[from] arrow::error::ArrowError),
41    /// Parquet error
42    #[error(transparent)]
43    Parquet(#[from] parquet::errors::ParquetError),
44    /// Avro error
45    #[error(transparent)]
46    Avro(#[from] apache_avro::Error),
47    /// Thrift error
48    #[error(transparent)]
49    Thrift(#[from] thrift::Error),
50    /// sql parser error
51    #[error(transparent)]
52    SQLParser(#[from] sqlparser::parser::ParserError),
53    /// Serde json
54    #[error(transparent)]
55    JSONSerde(#[from] serde_json::Error),
56    /// Chrono parse
57    #[error(transparent)]
58    Uuid(#[from] uuid::Error),
59    /// Url parse
60    #[error(transparent)]
61    Url(#[from] url::ParseError),
62    /// Io error
63    #[error(transparent)]
64    IO(#[from] std::io::Error),
65    /// Channel error
66    #[error(transparent)]
67    FuturesChannel(#[from] futures::channel::mpsc::SendError),
68    /// Tokio error
69    #[error(transparent)]
70    TokioJoinError(#[from] tokio::task::JoinError),
71    /// Objectstore error
72    #[error(transparent)]
73    ObjectStore(#[from] object_store::Error),
74    /// Try from slice error
75    #[error(transparent)]
76    TryFromSlice(#[from] std::array::TryFromSliceError),
77    /// Try from int error
78    #[error(transparent)]
79    TryFromInt(#[from] std::num::TryFromIntError),
80    /// Utf8 error
81    #[error(transparent)]
82    UTF8(#[from] std::str::Utf8Error),
83    /// from utf8 error
84    #[error(transparent)]
85    FromUTF8(#[from] std::string::FromUtf8Error),
86    /// parse int error
87    #[error(transparent)]
88    ParseInt(#[from] std::num::ParseIntError),
89    /// table metadata builder
90    #[error(transparent)]
91    TableMetadataBuilder(
92        #[from] iceberg_rust_spec::spec::table_metadata::TableMetadataBuilderError,
93    ),
94    /// view metadata builder
95    #[error(transparent)]
96    ViewMetadataBuilder(
97        #[from] iceberg_rust_spec::spec::view_metadata::GeneralViewMetadataBuilderError,
98    ),
99    /// version builder
100    #[error(transparent)]
101    VersionBuilder(#[from] iceberg_rust_spec::spec::view_metadata::VersionBuilderError),
102    /// create table builder
103    #[error(transparent)]
104    CreateTableBuilder(#[from] crate::catalog::create::CreateTableBuilderError),
105    /// create view builder
106    #[error(transparent)]
107    CreateViewBuilder(#[from] crate::catalog::create::CreateViewBuilderError),
108    /// create view builder
109    #[error(transparent)]
110    CreateMaterializedViewBuilder(
111        #[from] crate::catalog::create::CreateMaterializedViewBuilderError,
112    ),
113}
114
115impl From<Error> for ArrowError {
116    fn from(value: Error) -> Self {
117        ArrowError::from_external_error(Box::new(value))
118    }
119}