Skip to content

Commit 6485c04

Browse files
committed
Remove multi_level flag and simplify the multi-level-wildcard case
1 parent 18ef0ce commit 6485c04

File tree

1 file changed

+34
-36
lines changed

1 file changed

+34
-36
lines changed

mqtt-v5-broker/src/retained.rs

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
140140
let mut path = vec![];
141141
let levels: Vec<TopicLevel> = topic_filter.levels().collect();
142142

143-
Self::retained_messages_inner(self, &mut path, &levels, 0, false, &mut retained_messages);
143+
Self::retained_messages_inner(self, &mut path, &levels, 0, &mut retained_messages);
144144

145145
retained_messages.into_iter()
146146
}
@@ -150,33 +150,8 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
150150
path: &mut Vec<String>,
151151
levels: &[TopicLevel],
152152
current_level: usize,
153-
multi_level: bool,
154153
retained_messages: &mut Vec<&'a T>,
155154
) {
156-
if multi_level {
157-
// Add all the retained messages and keep going.
158-
for (level, sub_tree) in &current_tree.concrete_topic_levels {
159-
path.push(level.to_string());
160-
if let Some(retained_data) = sub_tree.retained_data.as_ref() {
161-
println!("Adding {:?} at path: {:?}", retained_data, path);
162-
retained_messages.push(retained_data);
163-
}
164-
165-
Self::retained_messages_inner(
166-
sub_tree,
167-
path,
168-
levels,
169-
current_level + 1,
170-
multi_level,
171-
retained_messages,
172-
);
173-
174-
path.pop();
175-
}
176-
177-
return;
178-
}
179-
180155
let level = &levels[current_level];
181156

182157
match level {
@@ -190,7 +165,6 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
190165
path,
191166
levels,
192167
current_level + 1,
193-
multi_level,
194168
retained_messages,
195169
);
196170
} else {
@@ -211,14 +185,7 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
211185
retained_messages.push(retained_data);
212186
}
213187

214-
Self::retained_messages_inner(
215-
sub_tree,
216-
path,
217-
levels,
218-
current_level + 1,
219-
true,
220-
retained_messages,
221-
);
188+
Self::retained_messages_multilevel(sub_tree, path, retained_messages);
222189
path.pop();
223190
}
224191
},
@@ -237,7 +204,6 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
237204
path,
238205
levels,
239206
current_level + 1,
240-
false,
241207
retained_messages,
242208
);
243209
} else {
@@ -253,6 +219,25 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
253219
}
254220
}
255221

222+
fn retained_messages_multilevel<'a>(
223+
current_tree: &'a Self,
224+
path: &mut Vec<String>,
225+
retained_messages: &mut Vec<&'a T>,
226+
) {
227+
// Add all the retained messages and keep going.
228+
for (level, sub_tree) in &current_tree.concrete_topic_levels {
229+
path.push(level.to_string());
230+
if let Some(retained_data) = sub_tree.retained_data.as_ref() {
231+
println!("Adding {:?} at path: {:?}", retained_data, path);
232+
retained_messages.push(retained_data);
233+
}
234+
235+
Self::retained_messages_multilevel(sub_tree, path, retained_messages);
236+
237+
path.pop();
238+
}
239+
}
240+
256241
// pub fn retained_messages(&self, topic_filter: &TopicFilter) -> impl Iterator<Item = &T> {
257242
// let mut retained_messages = Vec::new();
258243
// let mut tree_stack = vec![(self, 0)];
@@ -356,8 +341,15 @@ mod tests {
356341
sub_tree.insert(&"home/bedroom/temperature/val".parse().unwrap(), 2);
357342
sub_tree.insert(&"home/kitchen/temperature/val".parse().unwrap(), 3);
358343
sub_tree.insert(&"home/kitchen/humidity/val".parse().unwrap(), 4);
344+
sub_tree.insert(&"home/kitchen/humidity/val/celsius".parse().unwrap(), 42);
345+
346+
sub_tree.insert(&"office/cafe/humidity/val".parse().unwrap(), 5);
347+
sub_tree.insert(&"office/cafe/temperature/val".parse().unwrap(), 6);
348+
sub_tree.insert(&"office/meeting_room_1/temperature/val".parse().unwrap(), 7);
349+
sub_tree.insert(&"office/meeting_room_1/humidity/val".parse().unwrap(), 8);
359350

360351
let filter = "home/+/+/val";
352+
println!("{}", filter);
361353
for msg in sub_tree.retained_messages(&filter.parse().unwrap()) {
362354
dbg!(msg);
363355
}
@@ -379,5 +371,11 @@ mod tests {
379371
for msg in sub_tree.retained_messages(&filter.parse().unwrap()) {
380372
dbg!(msg);
381373
}
374+
375+
let filter = "+/+/#";
376+
println!("{}", filter);
377+
for msg in sub_tree.retained_messages(&filter.parse().unwrap()) {
378+
dbg!(msg);
379+
}
382380
}
383381
}

0 commit comments

Comments
 (0)