1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use crate::*;
use bytes::{Bytes, Buf, BytesMut, BufMut};
#[derive(Debug, Clone, PartialEq)]
pub struct PubRec {
pub pkid: u16,
}
impl PubRec {
pub fn new(pkid: u16) -> PubRec {
PubRec { pkid }
}
pub(crate) fn assemble(fixed_header: FixedHeader, mut bytes: Bytes) -> Result<Self, Error> {
if fixed_header.remaining_len != 2 {
return Err(Error::PayloadSizeIncorrect);
}
let variable_header_index = fixed_header.fixed_len;
bytes.advance(variable_header_index);
let pkid = bytes.get_u16();
let pubrec = PubRec { pkid };
Ok(pubrec)
}
pub fn write(&self, payload: &mut BytesMut) -> Result<usize, Error> {
let o: &[u8] = &[0x50, 0x02];
payload.put_slice(o);
payload.put_u16(self.pkid);
Ok(4)
}
}