rumqttc/mqttbytes/v4/
pubrec.rs1use super::*;
2use bytes::{Buf, BufMut, Bytes, BytesMut};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct PubRec {
7 pub pkid: u16,
8}
9
10impl PubRec {
11 pub fn new(pkid: u16) -> PubRec {
12 PubRec { pkid }
13 }
14
15 fn len(&self) -> usize {
16 2
18 }
19
20 pub fn size(&self) -> usize {
21 let len = self.len();
22 let remaining_len_size = len_len(len);
23
24 1 + remaining_len_size + len
25 }
26
27 pub fn read(fixed_header: FixedHeader, mut bytes: Bytes) -> Result<Self, Error> {
28 let variable_header_index = fixed_header.fixed_header_len;
29 bytes.advance(variable_header_index);
30 let pkid = read_u16(&mut bytes)?;
31 if fixed_header.remaining_len == 2 {
32 return Ok(PubRec { pkid });
33 }
34
35 if fixed_header.remaining_len < 4 {
36 return Ok(PubRec { pkid });
37 }
38
39 let puback = PubRec { 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(0x50);
47 let count = write_remaining_length(buffer, len)?;
48 buffer.put_u16(self.pkid);
49 Ok(1 + count + len)
50 }
51}