1pub trait IdentifyLast: Iterator + Sized {
3 fn identify_last(self) -> Iter<Self>;
4}
5
6impl<It> IdentifyLast for It
7where
8 It: Iterator,
9{
10 fn identify_last(mut self) -> Iter<Self> {
11 let e = self.next();
12 Iter {
13 iter: self,
14 buffer: e,
15 }
16 }
17}
18
19pub struct Iter<It>
20where
21 It: Iterator,
22{
23 iter: It,
24 buffer: Option<It::Item>,
25}
26
27impl<It> Iterator for Iter<It>
28where
29 It: Iterator,
30{
31 type Item = (bool, It::Item);
32
33 fn next(&mut self) -> Option<Self::Item> {
34 match self.buffer.take() {
35 None => None,
36 Some(e) => match self.iter.next() {
37 None => Some((true, e)),
38 Some(f) => {
39 self.buffer = Some(f);
40 Some((false, e))
41 }
42 },
43 }
44 }
45}