use core::fmt;
use alloc::string::String;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ProtocolError {
InvalidPacket(String),
InvalidHeader,
InvalidLength,
InvalidPacketId,
UnsupportedVersion(String),
V5Specific(String),
EncodingError(String),
DecodingError(String),
InvalidQoS(u8),
InvalidTopic(String),
InvalidTopicFilter(String),
ConnectionState(String),
SubscriptionLimitExceeded,
PacketTooLarge(usize),
InvalidPayload(String),
}
impl fmt::Display for ProtocolError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidPacket(msg) => write!(f, "Invalid packet: {msg}"),
Self::InvalidHeader => write!(f, "Invalid packet header"),
Self::InvalidLength => write!(f, "Invalid packet length"),
Self::InvalidPacketId => write!(f, "Invalid packet ID"),
Self::UnsupportedVersion(ver) => write!(f, "Unsupported protocol version: {ver}"),
Self::V5Specific(msg) => write!(f, "MQTT v5.0 error: {msg}"),
Self::EncodingError(msg) => write!(f, "Encoding error: {msg}"),
Self::DecodingError(msg) => write!(f, "Decoding error: {msg}"),
Self::InvalidQoS(qos) => write!(f, "Invalid QoS level: {qos}"),
Self::InvalidTopic(topic) => write!(f, "Invalid topic: {topic}"),
Self::InvalidTopicFilter(filter) => write!(f, "Invalid topic filter: {filter}"),
Self::ConnectionState(msg) => write!(f, "Connection state error: {msg}"),
Self::SubscriptionLimitExceeded => write!(f, "Subscription limit exceeded"),
Self::PacketTooLarge(size) => write!(f, "Packet too large: {size} bytes"),
Self::InvalidPayload(msg) => write!(f, "Invalid payload: {msg}"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for ProtocolError {}