Encoding
This commit is contained in:
@@ -50,7 +50,6 @@ impl StringPair<'_> {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TopicFilter<'a> {
|
||||
pub len: u16,
|
||||
pub filter: EncodedString<'a>,
|
||||
pub sub_options: u8,
|
||||
}
|
||||
@@ -58,14 +57,13 @@ pub struct TopicFilter<'a> {
|
||||
impl TopicFilter<'_> {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
len: 0,
|
||||
filter: EncodedString::new(),
|
||||
sub_options: 0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn len(&self) -> u16 {
|
||||
return self.len + 2;
|
||||
return self.filter.len + 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::utils::buffer_reader::{BinaryData, EncodedString, StringPair};
|
||||
use crate::utils::buffer_reader::{BinaryData, EncodedString, StringPair, TopicFilter};
|
||||
use core::str;
|
||||
use heapless::Vec;
|
||||
use crate::encoding::variable_byte_integer::{VariableByteInteger, VariableByteIntegerEncoder};
|
||||
@@ -116,4 +116,22 @@ impl<'a> BuffWriter<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn encode_topic_filter_ref(& mut self, sub: bool, topic_filter: & TopicFilter<'a>) {
|
||||
self.write_string_ref(&topic_filter.filter);
|
||||
if sub {
|
||||
self.write_u8(topic_filter.sub_options)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn encode_topic_filters_ref<const MAX: usize>(& mut self, sub: bool, len: usize, filters: & Vec<TopicFilter<'a>, MAX>) {
|
||||
let mut i = 0;
|
||||
loop {
|
||||
let topic_filter: & TopicFilter<'a> = filters.get(i).unwrap();
|
||||
self.encode_topic_filter_ref(sub, topic_filter);
|
||||
if i == len {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user