use core::fmt;
use alloc::string::String;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SessionError {
StorageError(String),
CapacityExceeded,
SubscriptionLimitExceeded,
InflightLimitExceeded,
InvalidPacketId(u16),
DuplicatePacketId(u16),
PacketIdExhausted,
CorruptedState(String),
PersistenceError(String),
RestoreError(String),
CleanupError(String),
OutOfMemory,
}
impl fmt::Display for SessionError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::StorageError(msg) => write!(f, "Session storage error: {msg}"),
Self::CapacityExceeded => write!(f, "Session capacity exceeded"),
Self::SubscriptionLimitExceeded => write!(f, "Subscription limit exceeded"),
Self::InflightLimitExceeded => write!(f, "In-flight message limit exceeded"),
Self::InvalidPacketId(id) => write!(f, "Invalid packet ID: {id}"),
Self::DuplicatePacketId(id) => write!(f, "Duplicate packet ID: {id}"),
Self::PacketIdExhausted => write!(f, "Packet IDs exhausted"),
Self::CorruptedState(msg) => write!(f, "Corrupted session state: {msg}"),
Self::PersistenceError(msg) => write!(f, "Persistence failed: {msg}"),
Self::RestoreError(msg) => write!(f, "Session restoration failed: {msg}"),
Self::CleanupError(msg) => write!(f, "Session cleanup failed: {msg}"),
Self::OutOfMemory => write!(f, "Out of memory"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for SessionError {}