use crate::protocol::len_len;
use crate::protocol::packet::write_remaining_length;
use bytes::{BufMut, Bytes, BytesMut};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Unsubscribe {
V4 {
packet_id: u16,
payload: Bytes,
},
V5 {
packet_id: u16,
properties: Bytes,
filters: Bytes,
},
}
impl Unsubscribe {
pub fn set_packet_id(&mut self, new_packet_id: u16) {
match self {
Unsubscribe::V4 { packet_id, .. } => *packet_id = new_packet_id,
Unsubscribe::V5 { packet_id, .. } => *packet_id = new_packet_id,
}
}
pub fn packet_id(&self) -> u16 {
match self {
Unsubscribe::V4 { packet_id, .. } => *packet_id,
Unsubscribe::V5 { packet_id, .. } => *packet_id,
}
}
pub fn write(&self, buffer: &mut BytesMut) -> usize {
match self {
Self::V4 {
packet_id,
payload: filters,
} => {
buffer.put_u8(0xa2);
let remaining_len = filters.len() + 2;
let remaining_len_bytes = write_remaining_length(buffer, remaining_len);
buffer.put_u16(*packet_id);
buffer.extend_from_slice(filters.as_ref());
1 + remaining_len_bytes + remaining_len
}
Self::V5 {
packet_id,
properties,
filters,
} => {
buffer.put_u8(0xa2);
let properties_len = len_len(properties.len());
let remaining_len = 2 + properties_len + properties.len() + filters.len();
let remaining_len_bytes = write_remaining_length(buffer, remaining_len);
buffer.put_u16(*packet_id);
let _properties_len_bytes = write_remaining_length(buffer, properties.len());
if properties.len() > 0 {
buffer.extend_from_slice(properties.as_ref())
}
buffer.extend_from_slice(filters.as_ref());
1 + remaining_len + remaining_len_bytes
}
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Filter {
pub path: String,
}