@@ -140,7 +140,7 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
140
140
let mut path = vec ! [ ] ;
141
141
let levels: Vec < TopicLevel > = topic_filter. levels ( ) . collect ( ) ;
142
142
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) ;
144
144
145
145
retained_messages. into_iter ( )
146
146
}
@@ -150,33 +150,8 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
150
150
path : & mut Vec < String > ,
151
151
levels : & [ TopicLevel ] ,
152
152
current_level : usize ,
153
- multi_level : bool ,
154
153
retained_messages : & mut Vec < & ' a T > ,
155
154
) {
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
-
180
155
let level = & levels[ current_level] ;
181
156
182
157
match level {
@@ -190,7 +165,6 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
190
165
path,
191
166
levels,
192
167
current_level + 1 ,
193
- multi_level,
194
168
retained_messages,
195
169
) ;
196
170
} else {
@@ -211,14 +185,7 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
211
185
retained_messages. push ( retained_data) ;
212
186
}
213
187
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) ;
222
189
path. pop ( ) ;
223
190
}
224
191
} ,
@@ -237,7 +204,6 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
237
204
path,
238
205
levels,
239
206
current_level + 1 ,
240
- false ,
241
207
retained_messages,
242
208
) ;
243
209
} else {
@@ -253,6 +219,25 @@ impl<T: std::fmt::Debug> RetainedMessageTreeNode<T> {
253
219
}
254
220
}
255
221
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
+
256
241
// pub fn retained_messages(&self, topic_filter: &TopicFilter) -> impl Iterator<Item = &T> {
257
242
// let mut retained_messages = Vec::new();
258
243
// let mut tree_stack = vec![(self, 0)];
@@ -356,8 +341,15 @@ mod tests {
356
341
sub_tree. insert ( & "home/bedroom/temperature/val" . parse ( ) . unwrap ( ) , 2 ) ;
357
342
sub_tree. insert ( & "home/kitchen/temperature/val" . parse ( ) . unwrap ( ) , 3 ) ;
358
343
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 ) ;
359
350
360
351
let filter = "home/+/+/val" ;
352
+ println ! ( "{}" , filter) ;
361
353
for msg in sub_tree. retained_messages ( & filter. parse ( ) . unwrap ( ) ) {
362
354
dbg ! ( msg) ;
363
355
}
@@ -379,5 +371,11 @@ mod tests {
379
371
for msg in sub_tree. retained_messages ( & filter. parse ( ) . unwrap ( ) ) {
380
372
dbg ! ( msg) ;
381
373
}
374
+
375
+ let filter = "+/+/#" ;
376
+ println ! ( "{}" , filter) ;
377
+ for msg in sub_tree. retained_messages ( & filter. parse ( ) . unwrap ( ) ) {
378
+ dbg ! ( msg) ;
379
+ }
382
380
}
383
381
}
0 commit comments