This commit is contained in:
Ondrej Babec
2022-02-20 14:18:31 +01:00
parent e4c3505aaf
commit 7218cb2a06
17 changed files with 201 additions and 27 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}
}
}