mqttbytes/v4/
pubrel.rs

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