use crate::AsyncIterator;
#[must_use = "iterators are lazy and do nothing unless consumed"]
#[derive(Debug, Clone)]
pub struct Enumerate<I> {
inner: I,
cnt: usize,
}
impl<I> Enumerate<I> {
pub fn new(inner: I) -> Enumerate<I> {
Self { inner, cnt: 0 }
}
}
impl<I> AsyncIterator for Enumerate<I>
where
I: AsyncIterator,
{
type Item = (usize, <I as AsyncIterator>::Item);
async fn next(&mut self) -> Option<Self::Item> {
let v = self.inner.next().await?;
let cnt = self.cnt;
self.cnt += 1;
Some((cnt, v))
}
fn size_hint(&self) -> (usize, Option<usize>) {
self.inner.size_hint()
}
}