rusty-cotp 1.0.0

Implements the Kernel Function of Connection Oriented Transport Protocol/ISO 8073/IEC 8073/ITU-T X.224 standard.
Documentation
use crate::{
    api::CotpError,
    packet::data_transfer::{DATA_TRANSFER_CODE, DataTransfer},
};

pub fn serialise_data_transfer(data: &DataTransfer) -> Result<Vec<u8>, CotpError> {
    let mut buffer = Vec::new();
    buffer.push(2);
    buffer.push(DATA_TRANSFER_CODE);
    match data.end_of_transmission() {
        true => buffer.push(0x80),
        false => buffer.push(0x00),
    }
    buffer.extend(data.user_data());
    Ok(buffer)
}

#[cfg(test)]
mod tests {
    use super::*;

    use tracing_test::traced_test;

    use crate::{packet::payload::TransportProtocolDataUnit, serialiser::packet::serialise};

    #[tokio::test]
    #[traced_test]
    async fn parse_payloads_happy() -> Result<(), anyhow::Error> {
        assert_eq!(serialise(&TransportProtocolDataUnit::DT(DataTransfer::new(false, &[1, 2, 3])))?, hex::decode("02F000010203")?.as_slice());
        assert_eq!(serialise(&TransportProtocolDataUnit::DT(DataTransfer::new(true, &[3, 2, 1])))?, hex::decode("02F080030201")?.as_slice());

        Ok(())
    }
}