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)
}
}