literustlib 0.4.0

Rust parser for LiteNetLib packets
Documentation
#[derive(Debug, Clone)]
pub struct Packet {
    pub header: super::Header,
    pub data: bytes::Bytes,
}

impl Packet {
    pub fn with_data(property: super::Property, data: &[u8]) -> Self {
        Self {
            header: super::Header {
                property,
                sequence: None,
                fragment: None,
            },
            data: bytes::Bytes::copy_from_slice(data),
        }
    }

    pub fn without_data(header: super::Header) -> Self {
        Self {
            header,
            data: bytes::Bytes::new(),
        }
    }

    pub fn parse(slice: &[u8]) -> std::io::Result<Self> {
        if slice == &[100, 117, 109, 109, 121] {
            Ok(Self {
                header: super::Header::with_prop(super::Property::Dummy),
                data: bytes::Bytes::new(),
            })
        } else {
            let header = super::Header::parse(slice)?;
            Ok(Self {
                header,
                data: bytes::Bytes::copy_from_slice(&slice[header.len()..]),
            })
        }

    }

    pub fn dump<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<usize> {
        if self.header.property == super::Property::Dummy {
            writer.write_all(&[100, 117, 109, 109, 121])?;
            Ok(5)
        } else {
            let header_len = self.header.dump(writer)?;
            writer.write_all(&self.data)?;
            Ok(header_len + self.data.len())
        }

    }
}