#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ProtocolError {
InvalidVerb(u8),
FrameTooShort,
FrameTooLarge,
MissingEndMarker,
InvalidEscape,
PayloadError,
InvalidAddress,
AuthRequired,
AuthFailed,
InvalidAuthBlock,
InsufficientPrivileges,
InvalidSession,
UnknownHost(u8),
#[cfg(feature = "std")]
Io(String),
}
impl core::fmt::Display for ProtocolError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
ProtocolError::InvalidVerb(b) => write!(f, "invalid verb byte: 0x{:02X}", b),
ProtocolError::FrameTooShort => write!(f, "frame too short"),
ProtocolError::FrameTooLarge => write!(f, "frame exceeds maximum size"),
ProtocolError::MissingEndMarker => write!(f, "missing END marker (0x00)"),
ProtocolError::InvalidEscape => write!(f, "invalid escape sequence"),
ProtocolError::PayloadError => write!(f, "payload decode error"),
ProtocolError::InvalidAddress => write!(f, "invalid address format"),
ProtocolError::AuthRequired => write!(f, "authentication required"),
ProtocolError::AuthFailed => write!(f, "authentication failed"),
ProtocolError::InvalidAuthBlock => write!(f, "invalid auth block structure"),
ProtocolError::InsufficientPrivileges => write!(f, "insufficient privileges"),
ProtocolError::InvalidSession => write!(f, "invalid or expired session"),
ProtocolError::UnknownHost(idx) => write!(f, "unknown host at index {}", idx),
#[cfg(feature = "std")]
ProtocolError::Io(msg) => write!(f, "I/O error: {}", msg),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for ProtocolError {}
pub type ProtocolResult<T> = Result<T, ProtocolError>;