Skip to main content

cell_core/
error.rs

1// SPDX-License-Identifier: MIT
2// cell-core/src/error.rs
3
4use core::fmt;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[repr(u16)]
8pub enum CellError {
9    ConnectionRefused = 100,
10    ConnectionReset = 101,
11    Timeout = 102,
12    AccessDenied = 103,
13    CapabilityMissing = 104,
14    IoError = 105,
15    CircuitBreakerOpen = 106,
16
17    InvalidHeader = 200,
18    SerializationFailure = 203,
19    Corruption = 204,
20    ProtocolMismatch = 205,
21}
22
23impl fmt::Display for CellError {
24    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25        match self {
26            CellError::ConnectionRefused => write!(f, "Connection Refused"),
27            CellError::ConnectionReset => write!(f, "Connection Reset"),
28            CellError::Timeout => write!(f, "Timeout"),
29            CellError::AccessDenied => write!(f, "Access Denied"),
30            CellError::CapabilityMissing => write!(f, "Capability Missing"),
31            CellError::IoError => write!(f, "I/O Error"),
32            CellError::CircuitBreakerOpen => write!(f, "Circuit Breaker Open"),
33            CellError::InvalidHeader => write!(f, "Invalid Vesicle Header"),
34            CellError::SerializationFailure => write!(f, "Serialization Failure"),
35            CellError::Corruption => write!(f, "Data Corruption Detected"),
36            CellError::ProtocolMismatch => write!(f, "Protocol Mismatch"),
37        }
38    }
39}
40
41// Now this works because `extern crate std` is conditional in lib.rs
42#[cfg(feature = "std")]
43impl std::error::Error for CellError {}