Skip to main content

moirai_iter/async_iter/
sources.rs

1//! Async range and vector iterators.
2
3use super::traits::{AsyncIterator, IntoAsyncIterator};
4
5/// Async iterator over a vector
6pub struct AsyncVecIter<T> {
7    items: Vec<T>,
8}
9
10impl<T: Send + 'static> AsyncVecIter<T> {
11    /// Create a new async vector iterator
12    pub fn new(items: Vec<T>) -> Self {
13        Self { items }
14    }
15}
16
17impl<T: Send + 'static> AsyncIterator for AsyncVecIter<T> {
18    type Item = T;
19
20    fn into_vec(self) -> Vec<Self::Item> {
21        self.items
22    }
23}
24
25impl<T: Send + 'static> IntoAsyncIterator for Vec<T> {
26    type Item = T;
27    type IntoAsyncIter = AsyncVecIter<T>;
28
29    fn into_async_iter(self) -> Self::IntoAsyncIter {
30        AsyncVecIter::new(self)
31    }
32}
33
34/// Async range iterator
35pub struct AsyncRangeIter {
36    start: usize,
37    end: usize,
38}
39
40impl AsyncRangeIter {
41    /// Create a new async range iterator
42    pub fn new(start: usize, end: usize) -> Self {
43        Self { start, end }
44    }
45}
46
47impl AsyncIterator for AsyncRangeIter {
48    type Item = usize;
49
50    fn into_vec(self) -> Vec<Self::Item> {
51        (self.start..self.end).collect()
52    }
53}