@@ -289,7 +289,12 @@ impl<'a, Filter: Fn(&Node) -> FilterResult> Iterator for FollowingFilteredSiblin
289289 if self . done {
290290 None
291291 } else {
292- self . done = self . front . as_ref ( ) . unwrap ( ) . id ( ) == self . back . as_ref ( ) . unwrap ( ) . id ( ) ;
292+ self . done = self
293+ . front
294+ . as_ref ( )
295+ . zip ( self . back . as_ref ( ) )
296+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
297+ . unwrap_or ( true ) ;
293298 let current = self . front ;
294299 self . front = next_filtered_sibling ( self . front , & self . filter ) ;
295300 current
@@ -304,7 +309,12 @@ impl<Filter: Fn(&Node) -> FilterResult> DoubleEndedIterator
304309 if self . done {
305310 None
306311 } else {
307- self . done = self . back . as_ref ( ) . unwrap ( ) . id ( ) == self . front . as_ref ( ) . unwrap ( ) . id ( ) ;
312+ self . done = self
313+ . front
314+ . as_ref ( )
315+ . zip ( self . back . as_ref ( ) )
316+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
317+ . unwrap_or ( true ) ;
308318 let current = self . back ;
309319 self . back = previous_filtered_sibling ( self . back , & self . filter ) ;
310320 current
@@ -347,7 +357,12 @@ impl<'a, Filter: Fn(&Node) -> FilterResult> Iterator for PrecedingFilteredSiblin
347357 if self . done {
348358 None
349359 } else {
350- self . done = self . front . as_ref ( ) . unwrap ( ) . id ( ) == self . back . as_ref ( ) . unwrap ( ) . id ( ) ;
360+ self . done = self
361+ . front
362+ . as_ref ( )
363+ . zip ( self . back . as_ref ( ) )
364+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
365+ . unwrap_or ( true ) ;
351366 let current = self . front ;
352367 self . front = previous_filtered_sibling ( self . front , & self . filter ) ;
353368 current
@@ -362,7 +377,12 @@ impl<Filter: Fn(&Node) -> FilterResult> DoubleEndedIterator
362377 if self . done {
363378 None
364379 } else {
365- self . done = self . back . as_ref ( ) . unwrap ( ) . id ( ) == self . front . as_ref ( ) . unwrap ( ) . id ( ) ;
380+ self . done = self
381+ . front
382+ . as_ref ( )
383+ . zip ( self . back . as_ref ( ) )
384+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
385+ . unwrap_or ( true ) ;
366386 let current = self . back ;
367387 self . back = next_filtered_sibling ( self . back , & self . filter ) ;
368388 current
@@ -403,7 +423,12 @@ impl<'a, Filter: Fn(&Node) -> FilterResult> Iterator for FilteredChildren<'a, Fi
403423 if self . done {
404424 None
405425 } else {
406- self . done = self . front . as_ref ( ) . unwrap ( ) . id ( ) == self . back . as_ref ( ) . unwrap ( ) . id ( ) ;
426+ self . done = self
427+ . front
428+ . as_ref ( )
429+ . zip ( self . back . as_ref ( ) )
430+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
431+ . unwrap_or ( true ) ;
407432 let current = self . front ;
408433 self . front = next_filtered_sibling ( self . front , & self . filter ) ;
409434 current
@@ -416,7 +441,12 @@ impl<Filter: Fn(&Node) -> FilterResult> DoubleEndedIterator for FilteredChildren
416441 if self . done {
417442 None
418443 } else {
419- self . done = self . back . as_ref ( ) . unwrap ( ) . id ( ) == self . front . as_ref ( ) . unwrap ( ) . id ( ) ;
444+ self . done = self
445+ . front
446+ . as_ref ( )
447+ . zip ( self . back . as_ref ( ) )
448+ . map ( |( f, b) | f. id ( ) == b. id ( ) )
449+ . unwrap_or ( true ) ;
420450 let current = self . back ;
421451 self . back = previous_filtered_sibling ( self . back , & self . filter ) ;
422452 current
0 commit comments