fastpeek/
std_impl.rs

1use crate::{Peek, PeekBack, PeekIter};
2
3impl<'a, T: 'a, const N: usize> Peek<'a, ()> for core::array::IntoIter<T, N> {
4    type PeekItem = &'a T;
5
6    fn peek(&'a self) -> Option<Self::PeekItem> {
7        self.as_slice().first()
8    }
9}
10
11impl<'a, T: 'a, const N: usize> PeekBack<'a, ()> for core::array::IntoIter<T, N> {
12    type PeekItem = &'a T;
13
14    fn peek_back(&'a self) -> Option<Self::PeekItem> {
15        self.as_slice().last()
16    }
17}
18
19impl<'a, T: 'a, const N: usize> PeekIter<'a, ()> for core::array::IntoIter<T, N> {
20    type Iter = core::slice::Iter<'a, T>;
21
22    fn peek_iter(&'a self) -> Self::Iter {
23        self.as_slice().iter()
24    }
25}
26
27#[cfg(test)]
28mod test {
29    use crate::{Peek, PeekBack, PeekIter};
30    #[test]
31    fn test_array_into_iter() {
32        let vec = [1, 2, 3];
33        let mut i = vec.into_iter();
34        assert_eq!(i.peek().cloned(), i.next());
35        assert_eq!(i.peek_back().cloned(), i.next_back());
36    }
37
38    #[test]
39    fn test_array_peek_into_iter() {
40        let vec = [1, 2, 3];
41        let i = vec.into_iter();
42        let i2 = i.clone();
43
44        assert!(i.zip(i2.peek_iter()).all(|(a, b)| a == *b));
45    }
46}