From f784b77e84fd11b266df6c57f4077458e839d211 Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Tue, 16 Sep 2025 23:29:13 +0100 Subject: [PATCH 1/4] mark: aatifsyed/peeking-next-vec From ba24dfa5b05f8cefa5d5f95c36c02624ff5c9b72 Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Tue, 16 Sep 2025 23:33:04 +0100 Subject: [PATCH 2/4] feat: impl PeekingNext for vec::IntoIter --- src/peeking_take_while.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/peeking_take_while.rs b/src/peeking_take_while.rs index f3259a919..a84db647b 100644 --- a/src/peeking_take_while.rs +++ b/src/peeking_take_while.rs @@ -92,6 +92,17 @@ where } } +#[cfg(feature = "use_alloc")] +impl PeekingNext for ::alloc::vec::IntoIter { + fn peeking_next(&mut self, accept: F) -> Option + where + F: FnOnce(&Self::Item) -> bool, + { + self.as_slice().iter().peeking_next(|it| accept(*it))?; + self.next() + } +} + impl PeekingNext for RepeatN { fn peeking_next(&mut self, accept: F) -> Option where From 6afbb36c3b9127fcf69dda85ec9b5bde85a92c7d Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Fri, 26 Sep 2025 22:03:38 +0200 Subject: [PATCH 3/4] review: call slice::first --- src/peeking_take_while.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/peeking_take_while.rs b/src/peeking_take_while.rs index b69a652a0..b8c0b990c 100644 --- a/src/peeking_take_while.rs +++ b/src/peeking_take_while.rs @@ -98,8 +98,10 @@ impl PeekingNext for ::alloc::vec::IntoIter { where F: FnOnce(&Self::Item) -> bool, { - self.as_slice().iter().peeking_next(|it| accept(*it))?; - self.next() + match accept(self.as_slice().first()?) { + true => self.next(), + false => None, + } } } From 41de9d36615bc5691eabb63877f8c717728438ed Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Fri, 26 Sep 2025 22:09:51 +0200 Subject: [PATCH 4/4] feat: impl PeekingNext for {vec::Drain, array::IntoIter, string::Drain} --- src/peeking_take_while.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/peeking_take_while.rs b/src/peeking_take_while.rs index b8c0b990c..e828b717d 100644 --- a/src/peeking_take_while.rs +++ b/src/peeking_take_while.rs @@ -105,6 +105,44 @@ impl PeekingNext for ::alloc::vec::IntoIter { } } +#[cfg(feature = "use_alloc")] +impl<'a, T> PeekingNext for ::alloc::vec::Drain<'a, T> { + fn peeking_next(&mut self, accept: F) -> Option + where + F: FnOnce(&Self::Item) -> bool, + { + match accept(self.as_slice().first()?) { + true => self.next(), + false => None, + } + } +} + +#[cfg(feature = "use_alloc")] +impl<'a> PeekingNext for ::alloc::string::Drain<'a> { + fn peeking_next(&mut self, accept: F) -> Option + where + F: FnOnce(&Self::Item) -> bool, + { + match accept(&self.as_str().chars().next()?) { + true => self.next(), + false => None, + } + } +} + +impl PeekingNext for ::core::array::IntoIter { + fn peeking_next(&mut self, accept: F) -> Option + where + F: FnOnce(&Self::Item) -> bool, + { + match accept(self.as_slice().first()?) { + true => self.next(), + false => None, + } + } +} + impl PeekingNext for RepeatN { fn peeking_next(&mut self, accept: F) -> Option where