use bytes::{Buf, BufMut};
use crate::{Error, protocol::codec, tcp::Header};
pub struct Encoder;
impl codec::Encode for Header {
fn encode(&self, buf: &mut impl BufMut) {
buf.put_u16(self.transaction_id);
buf.put_u16(self.protocol_id);
buf.put_u16(self.length);
buf.put_u8(self.unit_id.into());
}
}
impl codec::Decode for Header {
fn decode(from: &mut impl Buf) -> Result<Self, Error> {
Ok(Self {
transaction_id: from.try_get_u16()?,
protocol_id: from.try_get_u16()?,
length: from.try_get_u16()?,
unit_id: from.try_get_u8()?.into(),
})
}
}
impl Header {
pub const N_BYTES: usize = 7;
#[must_use]
pub const fn payload_length(&self) -> u16 {
self.length - 1
}
}