asynciter 0.1.0

Asynchronous iterator.
Documentation
use crate::{iterimpl::default_iter, AsyncIterator};

pub trait IntoAsyncIterator {
    type Item;
    type AsyncIter: AsyncIterator<Item = Self::Item>;

    fn into_aiter(self) -> Self::AsyncIter;
}

impl<T> IntoAsyncIterator for T
where
    T: IntoIterator,
{
    type Item = <T as IntoIterator>::Item;
    type AsyncIter = default_iter::SyncIter<<T as IntoIterator>::IntoIter>;

    fn into_aiter(self) -> Self::AsyncIter {
        default_iter::SyncIter::new(self.into_iter())
    }
}

pub trait ToAsyncIterator: IntoAsyncIterator {
    type Item;
    type AsyncIter: AsyncIterator<Item = <Self as ToAsyncIterator>::Item>;

    fn aiter(self) -> <Self as ToAsyncIterator>::AsyncIter;
}

impl<T> ToAsyncIterator for T
where
    T: Iterator,
{
    type Item = <T as Iterator>::Item;
    type AsyncIter = default_iter::SyncIter<T>;

    fn aiter(self) -> <Self as ToAsyncIterator>::AsyncIter {
        default_iter::SyncIter::new(self)
    }
}