oni_simulator 0.1.2

Networking simulator
Documentation
use generic_array::{
    ArrayLength,
    GenericArray,
};

#[derive(PartialEq, Debug)]
pub struct Payload<MTU: ArrayLength<u8>> {
    len: usize,
    data: GenericArray<u8, MTU>,
}

impl<MTU: ArrayLength<u8>> Clone for Payload<MTU> {
    fn clone(&self) -> Self {
        Self {
            len: self.len,
            data: self.data.clone(),
        }
    }
}

impl<'a, MTU: ArrayLength<u8>> Payload<MTU> {
    crate fn copy_to(&self, buf: &mut [u8]) -> usize {
        let payload = &self.data[..self.len];
        let len = self.len.min(buf.len());
        (&mut buf[..len]).copy_from_slice(&payload[..len]);
        len
    }
}

impl<'a, MTU: ArrayLength<u8>> From<&'a [u8]> for Payload<MTU> {
    fn from(payload: &'a [u8]) -> Self {
        let mut data: GenericArray<u8, MTU> = unsafe { std::mem::zeroed() };
        let len = payload.len();
        (&mut data[..len]).copy_from_slice(payload);
        Self { data, len }
    }
}