orouter-serial 0.1.1

Implementation of serial protocol for oRouter
Documentation
use defmt::Formatter;

use crate::host::{
    codec, Error as HostError, Message as HostMessage, ParseMessageError, StatusCode,
};

impl defmt::Format for HostError {
    fn format(&self, fmt: Formatter<'_>) {
        defmt::write!(fmt, "HostError::");
        match self {
            HostError::BufferFull => defmt::write!(fmt, "BufferFull"),
            HostError::BufferLengthNotSufficient => defmt::write!(fmt, "BufferLengthNotSufficient"),
            HostError::MalformedMessage => defmt::write!(fmt, "MalformedMessage"),
            HostError::MessageQueueFull => defmt::write!(fmt, "MessageQueueFull"),
            HostError::CannotAppendCommand => defmt::write!(fmt, "CannotAppendCommand"),
            HostError::CodecError(e) => defmt::write!(fmt, "CodecError({:?})", e),
            HostError::CobsEncodeError => defmt::write!(fmt, "CobsEncodeError"),
            HostError::CannotParseConfigNetwork => defmt::write!(fmt, "CannotParseConfigNetwork"),
        }
    }
}

impl defmt::Format for codec::CodecError {
    fn format(&self, fmt: Formatter<'_>) {
        defmt::write!(fmt, "CodecError::");
        match self {
            codec::CodecError::FrameCreateError => defmt::write!(fmt, "FrameCreateError"),
            codec::CodecError::DecodeError => defmt::write!(fmt, "DecodeError"),
            codec::CodecError::MalformedHex(_) => defmt::write!(fmt, "MalformedHex"),
        }
    }
}

impl defmt::Format for HostMessage {
    fn format(&self, fmt: Formatter<'_>) {
        defmt::write!(fmt, "Message::");
        match self {
            HostMessage::SendData { data } => defmt::write!(fmt, "SendData {{ data: {=[u8]:x} }}", data),
            HostMessage::ReceiveData { data } => defmt::write!(fmt, "ReceiveData {{ data: {=[u8]:x} }}", data),
            HostMessage::Configure { region, spreading_factor, network } => defmt::write!(fmt, "Configure {{ region: {=u8}, spreading_factor: {=u8}, network: {=[u8]:x} }}", region, spreading_factor, network.to_be_bytes()),
            HostMessage::ReportRequest => defmt::write!(fmt, "ReportRequest"),
            HostMessage::Report {
                sn,
                version_data,
                region,
                spreading_factor,
                receive_queue_size,
                transmit_queue_size,
                network,
            } => defmt::write!(fmt, "Report {{ sn: {=u32}, version_data: {=[u8]:x}, region: {=u8}, spreading_factor: {=u8}, receive_queue_size: {=u8}, transmit_queue_size: {=u8}, network: {=[u8]:x} }}", sn, version_data, region, spreading_factor, receive_queue_size, transmit_queue_size, network.to_be_bytes()),
            HostMessage::Status { code } => defmt::write!(fmt, "Status({=?})", code),
            HostMessage::UpgradeFirmwareRequest => defmt::write!(fmt, "UpgradeFirmwareRequest"),
            HostMessage::SetTimestamp { timestamp } => defmt::write!(fmt, "SetTimestamp({=u64})", timestamp),
            HostMessage::GetRawIq => defmt::write!(fmt, "GetRawIq"),
            #[cfg(feature = "std")]
            HostMessage::RawIq { data } => defmt::write!(fmt, "RawIq {{ data: {=[u8]:x} }}", data)
        }
    }
}

impl defmt::Format for ParseMessageError {
    fn format(&self, fmt: Formatter<'_>) {
        defmt::write!(fmt, "ParseMessageError::");
        match self {
            ParseMessageError::MissingSeparator => defmt::write!(fmt, "MissingSeparator"),
            ParseMessageError::InvalidMessage => defmt::write!(fmt, "InvalidMessage"),
            ParseMessageError::InvalidHex(_) => defmt::write!(fmt, "InvalidHex"),
            ParseMessageError::InvalidPayloadLength => defmt::write!(fmt, "InvalidPayloadLength"),
            ParseMessageError::PayloadTooLong => defmt::write!(fmt, "PayloadTooLong"),
            ParseMessageError::InvalidHexConfigNetwork => {
                defmt::write!(fmt, "InvalidHexConfigNetwork")
            }
            ParseMessageError::MissingConfigNetwork => defmt::write!(fmt, "MissingConfigNetwork"),
        }
    }
}

impl defmt::Format for StatusCode {
    fn format(&self, fmt: Formatter<'_>) {
        defmt::write!(fmt, "StatusCode::");
        match self {
            StatusCode::FrameReceived => defmt::write!(fmt, "FrameReceived"),
            StatusCode::CommandReceived => defmt::write!(fmt, "CommandReceived"),
            StatusCode::ErrUnknownCommmandReceived => {
                defmt::write!(fmt, "ErrUnknownCommmandReceived")
            }
            StatusCode::ErrBusyLoraTransmitting => defmt::write!(fmt, "ErrBusyLoraTransmitting"),
            StatusCode::ErrMessageQueueFull => defmt::write!(fmt, "ErrMessageQueueFull"),
            StatusCode::RadioNotConfigured => defmt::write!(fmt, "RadioNotConfigured"),
        }
    }
}