ti154 0.6.1

Library for creating and parsing TI 15.4 UART packets.
Documentation
pub mod areq;
pub mod sreq;
pub mod srsp;

use crate::error::Error;
use crate::subsystem::MTFramePayload;
use crate::types::CommandType;
use num_traits::FromPrimitive;

pub fn try_decode(cmd_type: &CommandType, id: u8, buffer: &[u8]) -> Result<MTFramePayload, Error> {
    use crate::types::UTILCommandId::*;
    use MTFramePayload::*;

    let id = FromPrimitive::from_u8(id).ok_or(Error::InvalidCommandId(id))?;

    match cmd_type {
        CommandType::POLL => Err(Error::NotImplemented),
        CommandType::SREQ => match id {
            CallbackSubCmd => {
                sreq::CallbackSubCmd::try_decode(buffer).map(|x| UTIL_CallbackSubCmd_SREQ(x))
            }
            GetExtAddr => sreq::GetExtAddr::try_decode(buffer).map(|x| UTIL_GetExtAddr_SREQ(x)),
            Loopback => sreq::Loopback::try_decode(buffer).map(|x| UTIL_Loopback_SREQ(x)),
            Random => sreq::Random::try_decode(buffer).map(|x| UTIL_Random_SREQ(x)),
        },
        CommandType::AREQ => match id {
            Loopback => areq::Loopback::try_decode(buffer).map(|x| UTIL_Loopback_AREQ(x)),
            _ => Err(Error::NotImplemented),
        },
        CommandType::SRSP => match id {
            CallbackSubCmd => {
                srsp::CallbackSubCmd::try_decode(buffer).map(|x| UTIL_CallbackSubCmd_SRSP(x))
            }
            GetExtAddr => srsp::GetExtAddr::try_decode(buffer).map(|x| UTIL_GetExtAddr_SRSP(x)),
            Loopback => srsp::Loopback::try_decode(buffer).map(|x| UTIL_Loopback_SRSP(x)),
            Random => srsp::Random::try_decode(buffer).map(|x| UTIL_Random_SRSP(x)),
        },
    }
}