pub use core::fmt;
pub use core::iter::{FusedIterator, Iterator, Peekable};
pub use core::primitive::usize;
pub use {Clone, Default, None, Option, Some};
#[doc(hidden)]
pub trait ExhaustAndFactoryish: crate::Exhaust + Clone + fmt::Debug {}
impl<T> ExhaustAndFactoryish for T where T: crate::Exhaust + Clone + fmt::Debug {}
#[must_use]
pub fn default<T: Default>() -> T {
Default::default()
}
#[must_use]
pub fn next<I: Iterator>(iterator: &mut I) -> Option<I::Item> {
iterator.next()
}
pub fn size_hint<I: Iterator>(iterator: &I) -> (usize, Option<usize>) {
iterator.size_hint()
}
pub fn clone<T: Clone>(original: &T) -> T {
original.clone()
}
pub fn peek<I: Iterator>(iter: &mut Peekable<I>) -> Option<&I::Item> {
iter.peek()
}
pub type Pf<T> = Peekable<<T as crate::Exhaust>::Iter>;
pub type Pv<T> = Peekable<crate::Iter<T>>;
pub fn pf_iter<T: crate::Exhaust>() -> Pf<T> {
T::exhaust_factories().peekable()
}
pub fn pv_iter<T: crate::Exhaust>() -> Pv<T> {
crate::Iter::<T>::default().peekable()
}