embedded_mqtt/variable_header/
packet_identifier.rs1use core::result::Result;
2
3use crate::{
4 fixed_header::PacketFlags,
5 codec::{self, Encodable},
6 status::Status,
7 error::{DecodeError, EncodeError},
8};
9
10use super::{PacketId, HeaderDecode};
11
12#[derive(PartialEq, Debug)]
14pub struct PacketIdentifier(PacketId);
15
16impl PacketIdentifier {
17 pub fn new(packet_identifier: PacketId) -> Self {
18 Self(packet_identifier)
19 }
20
21 pub fn packet_identifier(&self) -> PacketId {
22 self.0
23 }
24}
25
26impl<'buf> HeaderDecode<'buf> for PacketIdentifier {
27 fn decode(_flags: PacketFlags, bytes: &'buf [u8]) -> Result<Status<(usize, Self)>, DecodeError> {
28 let (offset, packet_identifier) = read!(codec::values::parse_u16, bytes, 0);
30
31 Ok(Status::Complete((offset, Self(packet_identifier))))
32 }
33}
34
35impl Encodable for PacketIdentifier {
36 fn encoded_len(&self) -> usize {
37 2
38 }
39
40 fn encode(&self, bytes: &mut [u8]) -> Result<usize, EncodeError> {
41 codec::values::encode_u16(self.0, bytes)
42 }
43}
44
45#[cfg(test)]
46mod tests {
47
48}