rumqttc/mqttbytes/v4/
pubcomp.rs

1use super::*;
2use bytes::{Buf, BufMut, Bytes, BytesMut};
3
4/// QoS2 Assured publish complete, in response to PUBREL packet
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct PubComp {
7    pub pkid: u16,
8}
9
10impl PubComp {
11    pub fn new(pkid: u16) -> PubComp {
12        PubComp { pkid }
13    }
14
15    pub fn size(&self) -> usize {
16        let len = self.len();
17        let remaining_len_size = len_len(len);
18        1 + remaining_len_size + len
19    }
20
21    fn len(&self) -> usize {
22        // pkid
23        2
24    }
25
26    pub fn read(fixed_header: FixedHeader, mut bytes: Bytes) -> Result<Self, Error> {
27        let variable_header_index = fixed_header.fixed_header_len;
28        bytes.advance(variable_header_index);
29        let pkid = read_u16(&mut bytes)?;
30
31        if fixed_header.remaining_len == 2 {
32            return Ok(PubComp { pkid });
33        }
34
35        if fixed_header.remaining_len < 4 {
36            return Ok(PubComp { pkid });
37        }
38
39        let puback = PubComp { pkid };
40
41        Ok(puback)
42    }
43
44    pub fn write(&self, buffer: &mut BytesMut) -> Result<usize, Error> {
45        let len = self.len();
46        buffer.put_u8(0x70);
47        let count = write_remaining_length(buffer, len)?;
48        buffer.put_u16(self.pkid);
49        Ok(1 + count + len)
50    }
51}