use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
TooShort,
MissingStartMarker,
MissingEndMarker,
CrcMismatch,
UnknownProtocol(u8),
InvalidLogin,
InvalidLocation,
InvalidStatus,
InvalidAlarm,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::TooShort => write!(f, "packet is shorter than the minimum GT06 packet size"),
Error::MissingStartMarker => write!(f, "packet does not start with 0x7878"),
Error::MissingEndMarker => write!(f, "packet does not end with 0x0d0a"),
Error::CrcMismatch => write!(f, "CRC-16 checksum mismatch"),
Error::UnknownProtocol(p) => write!(f, "unknown protocol number 0x{p:02x}"),
Error::InvalidLogin => write!(f, "malformed login packet"),
Error::InvalidLocation => write!(f, "malformed location packet"),
Error::InvalidStatus => write!(f, "malformed status packet"),
Error::InvalidAlarm => write!(f, "malformed alarm packet"),
}
}
}
impl std::error::Error for Error {}