clockwork_tuples/traits/iter.rs
1/// Iterates over a homogeneous cons-style tuple.
2///
3/// # Invariants
4/// - All elements have type `V`.
5/// - Iteration order matches tuple order.
6pub trait ConsIter<V> {
7 /// Converts this into an iterator
8 fn into_iter(self) -> impl Iterator<Item = V>;
9}
10
11impl<V> ConsIter<V> for () {
12 fn into_iter(self) -> impl Iterator<Item = V> { std::iter::empty() }
13}
14
15impl<Head, Tail> ConsIter<Head> for (Head, Tail)
16where
17 Tail: ConsIter<Head>,
18{
19 fn into_iter(self) -> impl Iterator<Item = Head> { std::iter::once(self.0).chain(self.1.into_iter()) }
20}