Skip to main content

probabilistic_rs/ebloom/
error.rs

1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, EbloomError>;
4pub type EbloomResult<T> = Result<T>; // Alias for backward compatibility
5
6#[derive(Error, Debug, PartialEq)]
7pub enum EbloomError {
8    #[error("Invalid configuration: {0}")]
9    InvalidConfig(String),
10
11    #[error("Index out of bounds: index {index}, capacity {capacity}")]
12    IndexOutOfBounds { index: usize, capacity: usize },
13
14    #[error("Invalid level: level {level}, max levels {max_levels}")]
15    InvalidLevel { level: usize, max_levels: usize },
16
17    #[error("Configuration error: {0}")]
18    ConfigError(String),
19
20    #[error("Storage error: {0}")]
21    StorageError(String),
22
23    #[error("Serialization error: {0}")]
24    SerializationError(String),
25
26    #[error("Lock error: {0}")]
27    LockError(String),
28
29    #[error("Time error: {0}")]
30    TimeError(String),
31}
32
33// Conversion from String to EbloomError (for validation errors)
34impl From<String> for EbloomError {
35    fn from(msg: String) -> Self {
36        EbloomError::InvalidConfig(msg)
37    }
38}
39
40// Conversion from serde_json::Error to EbloomError
41#[cfg(feature = "server")]
42impl From<serde_json::Error> for EbloomError {
43    fn from(err: serde_json::Error) -> Self {
44        EbloomError::SerializationError(err.to_string())
45    }
46}
47
48// Conversion from postcard::Error to EbloomError
49impl From<postcard::Error> for EbloomError {
50    fn from(err: postcard::Error) -> Self {
51        EbloomError::SerializationError(err.to_string())
52    }
53}