poster 0.3.1

MQTTv5 client library written in Rust.
Documentation
use crate::core::{
    error::CodecError,
    utils::{Encode, Encoder, PacketID, SizedPacket},
};
use bytes::BytesMut;
use core::mem;
use derive_builder::Builder;

#[derive(Builder)]
#[builder(build_fn(error = "CodecError"))]
pub(crate) struct PingreqTx {}

impl PingreqTx {
    const FIXED_HDR: u8 = Self::PACKET_ID << 4;
}

impl PacketID for PingreqTx {
    const PACKET_ID: u8 = 12;
}

impl SizedPacket for PingreqTx {
    fn packet_len(&self) -> usize {
        2 * mem::size_of::<u8>()
    }
}

impl Encode for PingreqTx {
    fn encode(&self, buf: &mut BytesMut) {
        let mut encoder = Encoder::from(buf);

        encoder.encode(Self::FIXED_HDR);
        encoder.encode(0u8);
    }
}

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

    #[test]
    fn to_bytes_0() {
        const EXPECTED: [u8; 2] = [PingreqTx::PACKET_ID << 4, 0];

        let builder = PingreqTxBuilder::default();
        let packet = builder.build().unwrap();
        let mut buf = BytesMut::new();
        packet.encode(&mut buf);

        assert_eq!(&buf.split().freeze()[..], EXPECTED);
    }
}