use rusty_modbus_codec::DecodeError;
#[derive(Debug, thiserror::Error)]
pub enum FrameError {
#[error("invalid MBAP protocol identifier: {0:#06X}")]
InvalidProtocolId(u16),
#[error("MBAP length overflow: {0}")]
LengthOverflow(u16),
#[error("invalid MBAP length: {declared} (minimum {minimum})")]
InvalidLength {
declared: u16,
minimum: u16,
},
#[error("MBAP length mismatch: declared {declared}, actual {actual}")]
LengthMismatch {
declared: u16,
actual: u16,
},
#[error("invalid PDU length: {length} (minimum {minimum})")]
InvalidPduLength {
length: usize,
minimum: usize,
},
#[error("PDU length overflow: {length} (maximum {maximum})")]
PduLengthOverflow {
length: usize,
maximum: usize,
},
#[error("CRC mismatch: expected {expected:#06X}, got {actual:#06X}")]
CrcMismatch {
expected: u16,
actual: u16,
},
#[error("frame truncated")]
Truncated,
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("decode error: {0}")]
Decode(#[from] DecodeError),
}