ps_datalake/
error.rs

1use std::sync::PoisonError;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum PsDataLakeError {
6    #[error(transparent)]
7    DataStoreCorrupted(#[from] DataStoreCorrupted),
8    #[error(transparent)]
9    IoError(#[from] std::io::Error),
10    #[error(transparent)]
11    PsDataChunkError(#[from] ps_datachunk::PsDataChunkError),
12    #[error(transparent)]
13    PsHashError(#[from] ps_hash::PsHashError),
14    #[error(transparent)]
15    PsHkeyError(#[from] ps_hkey::PsHkeyError),
16    #[error(transparent)]
17    PsMmapError(#[from] ps_mmap::PsMmapError),
18    #[error(transparent)]
19    TomlSerError(#[from] Box<toml::ser::Error>),
20    #[error(transparent)]
21    TomlDeError(#[from] Box<toml::de::Error>),
22    #[error("Index out of range")]
23    RangeError,
24    #[error("DataChunk not found")]
25    NotFound,
26    #[error("Index overflowed - too many index buckets")]
27    IndexBucketOverflow,
28    #[error("The store being written to is read-only")]
29    DataStoreNotRw,
30    #[error("DataStore is out of space!")]
31    DataStoreOutOfSpace,
32    #[error("DataLake is out of available stores!")]
33    DataLakeOutOfStores,
34    #[error("Failed to acquire a poisoned mutex")]
35    MutexPoisonError,
36    #[error("Failed to store data")]
37    StorageFailure,
38    #[error("Invalid input format")]
39    FormatError,
40    #[error("To initialize a DataStore, please provision at least 64 kB of space.")]
41    InitFailedNotEnoughSpace(usize),
42}
43
44pub type Result<T> = std::result::Result<T, PsDataLakeError>;
45
46impl<T> From<PoisonError<T>> for PsDataLakeError {
47    fn from(_: PoisonError<T>) -> Self {
48        Self::MutexPoisonError
49    }
50}
51
52impl From<toml::ser::Error> for PsDataLakeError {
53    fn from(value: toml::ser::Error) -> Self {
54        Self::TomlSerError(Box::from(value))
55    }
56}
57
58impl From<toml::de::Error> for PsDataLakeError {
59    fn from(value: toml::de::Error) -> Self {
60        Self::TomlDeError(Box::from(value))
61    }
62}
63
64#[derive(Clone, Debug, Error, Hash, PartialEq, Eq, PartialOrd, Ord)]
65pub enum DataStoreCorrupted {
66    #[error("DataStore has a size of {0} bytes")]
67    InvalidDataStoreSize(usize),
68    #[error("DataStore has an invalid file signature: {0}")]
69    InvalidMagic(String),
70    #[error("Index offset out of bounds: {0} > {1}")]
71    IndexOffsetOutOfBounds(u64, usize),
72    #[error("Data offset out of bounds: {0} > {1}")]
73    DataOffsetOutOfBounds(u64, usize),
74    #[error("Index ends out of bounds: {0} > {1}")]
75    IndexEndsOutOfBounds(usize, usize),
76    #[error("Data ends out of bounds: {0} > {1}")]
77    DataEndsOutOfBounds(usize, usize),
78    #[error("Index overlaps with data: {0} > {1}")]
79    IndexDataOverlap(usize, usize),
80    #[error("Index modulo {0} > index length {1}")]
81    IndexModuloTooSmall(u32, u32),
82}