#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResponsePacketError {
TooShort(usize),
CRCMismatch { expected: u16, received: u16 },
UnexpectedResponder(u8),
InvalidFormat,
}
impl core::fmt::Display for ResponsePacketError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(
f,
"{}",
match self {
Self::TooShort(len) => format!(
"response packet too short; expected at least 5 bytes but received {len}."
),
Self::CRCMismatch { expected, received } => format!(
"response CRC mismatch: expected 0x{expected:04X}, received 0x{received:04X}."
),
Self::UnexpectedResponder(id) =>
format!("response came from unexpected Modbus slave id 0x{id:02X}."),
Self::InvalidFormat => format!("response payload format is invalid."),
}
)
}
}
impl core::error::Error for ResponsePacketError {}