@@ -16,6 +16,7 @@ use crate::size_hint::{self, SizeHint};
16
16
use std:: fmt;
17
17
use std:: iter:: { Enumerate , FromIterator , Fuse , FusedIterator } ;
18
18
use std:: marker:: PhantomData ;
19
+ use std:: ops:: ControlFlow ;
19
20
20
21
/// An iterator adaptor that alternates elements from two iterators until both
21
22
/// run out.
@@ -93,13 +94,13 @@ where
93
94
let res = i. try_fold ( init, |mut acc, x| {
94
95
acc = f ( acc, x) ;
95
96
match j. next ( ) {
96
- Some ( y) => Ok ( f ( acc, y) ) ,
97
- None => Err ( acc) ,
97
+ Some ( y) => ControlFlow :: Continue ( f ( acc, y) ) ,
98
+ None => ControlFlow :: Break ( acc) ,
98
99
}
99
100
} ) ;
100
101
match res {
101
- Ok ( acc) => j. fold ( acc, f) ,
102
- Err ( acc) => i. fold ( acc, f) ,
102
+ ControlFlow :: Continue ( acc) => j. fold ( acc, f) ,
103
+ ControlFlow :: Break ( acc) => i. fold ( acc, f) ,
103
104
}
104
105
}
105
106
}
@@ -216,14 +217,12 @@ where
216
217
let res = i. try_fold ( init, |mut acc, x| {
217
218
acc = f ( acc, x) ;
218
219
match j. next ( ) {
219
- Some ( y) => Ok ( f ( acc, y) ) ,
220
- None => Err ( acc) ,
220
+ Some ( y) => ControlFlow :: Continue ( f ( acc, y) ) ,
221
+ None => ControlFlow :: Break ( acc) ,
221
222
}
222
223
} ) ;
223
- match res {
224
- Ok ( val) => val,
225
- Err ( val) => val,
226
- }
224
+ let ( ControlFlow :: Continue ( val) | ControlFlow :: Break ( val) ) = res;
225
+ val
227
226
}
228
227
}
229
228
@@ -595,14 +594,11 @@ where
595
594
F : FnMut ( B , Self :: Item ) -> B ,
596
595
{
597
596
let res = self . iter . try_fold ( acc, |acc, item| match item {
598
- Some ( item) => Ok ( f ( acc, item) ) ,
599
- None => Err ( acc) ,
597
+ Some ( item) => ControlFlow :: Continue ( f ( acc, item) ) ,
598
+ None => ControlFlow :: Break ( acc) ,
600
599
} ) ;
601
-
602
- match res {
603
- Ok ( val) => val,
604
- Err ( val) => val,
605
- }
600
+ let ( ControlFlow :: Continue ( val) | ControlFlow :: Break ( val) ) = res;
601
+ val
606
602
}
607
603
}
608
604
0 commit comments