1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
mod abstract_mut;
mod enumerate;
mod filter;
mod into_abstract;
mod into_iter;
pub mod iterators;
mod map;
mod shiperator;
mod with_id;

pub use enumerate::Enumerate;
pub use filter::Filter;
pub use into_iter::{IntoIter, IntoIterIds};
pub use iterators::*;
pub use map::Map;
pub use shiperator::{
    CurrentId, DoubleEndedShiperator, ExactSizeShiperator, IntoIterator, Shiperator,
};
pub use with_id::WithId;

impl<T> IntoIterIds for T
where
    T: IntoIter,
    <T as IntoIter>::IntoIter: CurrentId,
{
    #[allow(clippy::type_complexity)]
    type IntoIterIds = Map<
        WithId<<T as IntoIter>::IntoIter>,
        fn(
            (
                <<T as IntoIter>::IntoIter as CurrentId>::Id,
                <<T as IntoIter>::IntoIter as Shiperator>::Item,
            ),
        ) -> <<T as IntoIter>::IntoIter as CurrentId>::Id,
    >;

    fn iter_ids(self) -> Self::IntoIterIds {
        self.iter().with_id().map(|(id, _)| id)
    }
}