teltonika-avl-protocol 0.1.0

Teltonika AVL protocol written in Rust
Documentation
use core::error::Error;

#[derive(Copy, Clone, Debug)]
pub enum AvlError {
    InvalidFrame,
    InvalidChecksum { expected: u16, actual: u16 },
    InvalidDataCount { data_1_count: u8, data_2_count: u8 },
    InvalidPriority(u8),
    InvalidIoElementValueSize(usize),
}

impl core::fmt::Display for AvlError {
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        match self {
            AvlError::InvalidFrame => write!(f, "Invalid frame"),
            AvlError::InvalidChecksum { expected, actual } => {
                write!(
                    f,
                    "Invalid checksum: expected {}, actual {}",
                    expected, actual
                )
            }
            AvlError::InvalidDataCount {
                data_1_count,
                data_2_count,
            } => {
                write!(
                    f,
                    "Invalid data count: data_1_count {}, data_2_count {}. data_1_count must equal data_2_count",
                    data_1_count, data_2_count
                )
            }
            AvlError::InvalidPriority(value) => write!(f, "Invalid priority: {}", value),
            AvlError::InvalidIoElementValueSize(size) => {
                write!(f, "Invalid IO element value size: {}", size)
            }
        }
    }
}

impl Error for AvlError {}