From 55ade1cc889a1663a1ca59fb3901860f95baf9b7 Mon Sep 17 00:00:00 2001 From: Philippe-Cholet Date: Sun, 26 Nov 2023 11:13:50 +0100 Subject: [PATCH] `TakeWhileInclusive::fold` --- src/take_while_inclusive.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/take_while_inclusive.rs b/src/take_while_inclusive.rs index 5207d8a01..077b95498 100644 --- a/src/take_while_inclusive.rs +++ b/src/take_while_inclusive.rs @@ -64,6 +64,28 @@ where (0, self.iter.size_hint().1) } } + + fn fold(mut self, init: B, mut f: Fold) -> B + where + Fold: FnMut(B, Self::Item) -> B, + { + if self.done { + init + } else { + let predicate = &mut self.predicate; + self.iter + .try_fold(init, |mut acc, item| { + let is_ok = predicate(&item); + acc = f(acc, item); + if is_ok { + Ok(acc) + } else { + Err(acc) + } + }) + .unwrap_or_else(|err| err) + } + } } impl FusedIterator for TakeWhileInclusive