#![no_std]
mod flatmap;
pub use flatmap::*;
mod flatten;
pub use flatten::*;
mod flatten_base;
pub trait ConstSizeIntoIterator: IntoIterator {
const SIZE: usize;
}
impl<T, const N: usize> ConstSizeIntoIterator for [T; N] {
const SIZE: usize = N;
}
impl<T, const N: usize> ConstSizeIntoIterator for &[T; N] {
const SIZE: usize = N;
}
impl<T, const N: usize> ConstSizeIntoIterator for &mut [T; N] {
const SIZE: usize = N;
}
mod iterator_extension {
pub trait Sealed: IntoIterator {}
impl<T: IntoIterator> Sealed for T {}
}
pub trait IteratorExtension: IntoIterator + iterator_extension::Sealed {
fn const_size_flatten(self) -> ConstSizeFlatten<Self::IntoIter>
where
Self: Sized,
Self::Item: IntoIterator,
{
const_size_flatten(self)
}
fn const_size_flat_map<U, F>(self, f: F) -> ConstSizeFlatMap<Self::IntoIter, U, F>
where
Self: Sized,
U: IntoIterator,
F: FnMut(Self::Item) -> U,
{
const_size_flat_map(self, f)
}
}
impl<T: IntoIterator> IteratorExtension for T {}