gluesql_csv_storage/
error.rs1use {gluesql_core::error::Error, thiserror::Error};
2
3pub trait ResultExt<T, E: ToString> {
4 fn map_storage_err(self) -> Result<T, Error>;
5}
6
7impl<T, E: ToString> ResultExt<T, E> for std::result::Result<T, E> {
8 fn map_storage_err(self) -> Result<T, Error> {
9 self.map_err(|e| e.to_string()).map_err(Error::StorageMsg)
10 }
11}
12
13pub trait OptionExt<T, E: ToString> {
14 fn map_storage_err(self, error: E) -> Result<T, Error>;
15}
16
17impl<T, E: ToString> OptionExt<T, E> for std::option::Option<T> {
18 fn map_storage_err(self, error: E) -> Result<T, Error> {
19 self.ok_or_else(|| error.to_string())
20 .map_err(Error::StorageMsg)
21 }
22}
23
24impl From<CsvStorageError> for Error {
25 fn from(error: CsvStorageError) -> Self {
26 Error::StorageMsg(error.to_string())
27 }
28}
29
30#[derive(Error, Debug)]
31pub enum CsvStorageError {
32 #[error("file not found")]
33 FileNotFound,
34
35 #[error("table does not exist")]
36 TableDoesNotExist,
37
38 #[error("table name does not match with file")]
39 TableNameDoesNotMatchWithFile,
40
41 #[error("unreachable map type data row found")]
42 UnreachableMapTypeDataRowFound,
43
44 #[error("unreachable vector data row type found")]
45 UnreachableVecTypeDataRowTypeFound,
46}