use crate::Enumerable;
impl Enumerable for () {
type Enumerator = core::iter::Once<()>;
fn enumerator() -> Self::Enumerator {
core::iter::once(())
}
const ENUMERABLE_SIZE_OPTION: Option<usize> = Some(1);
}
#[doc(hidden)]
pub struct Tuple1Enumerator<A>
where
A: Enumerable,
{
a_enumerator: A::Enumerator,
}
impl<A: Enumerable> Iterator for Tuple1Enumerator<A> {
type Item = (A,);
fn next(&mut self) -> Option<Self::Item> {
self.a_enumerator.next().map(|a| (a,))
}
}
impl<A> Enumerable for (A,)
where
A: Enumerable,
{
type Enumerator = Tuple1Enumerator<A>;
fn enumerator() -> Self::Enumerator {
Tuple1Enumerator {
a_enumerator: A::enumerator(),
}
}
const ENUMERABLE_SIZE_OPTION: Option<usize> = A::ENUMERABLE_SIZE_OPTION;
}
enumerable_derive::__impl_enumerable_for_tuples!(2, 16);