Skip to content

Commit 892c600

Browse files
committed
Replace sample with a hidden from_iter implementation for double-ended-stream
1 parent abd3608 commit 892c600

File tree

4 files changed

+50
-50
lines changed

4 files changed

+50
-50
lines changed

src/stream/double_ended/from_iter.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use crate::stream::Stream;
2+
3+
use std::pin::Pin;
4+
use std::task::{Context, Poll};
5+
use crate::stream::DoubleEndedStream;
6+
7+
/// A double-ended stream that was created from iterator.
8+
///
9+
/// This stream is created by the [`from_iter`] function.
10+
/// See it documentation for more.
11+
///
12+
/// [`from_iter`]: fn.from_iter.html
13+
#[derive(Debug)]
14+
pub struct FromIter<T> {
15+
inner: Vec<T>,
16+
}
17+
18+
pub fn from_iter<I: IntoIterator>(iter: I) -> FromIter<I::Item> {
19+
FromIter { inner: iter.into_iter().collect() }
20+
}
21+
22+
impl<T> Unpin for FromIter<T> {}
23+
24+
impl<T> Stream for FromIter<T> {
25+
type Item = T;
26+
fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
27+
if self.inner.len() > 0 {
28+
return Poll::Ready(Some(self.inner.remove(0)));
29+
}
30+
return Poll::Ready(None);
31+
}
32+
}
33+
34+
impl<T> DoubleEndedStream for FromIter<T> {
35+
fn poll_next_back(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
36+
Poll::Ready(self.inner.pop())
37+
}
38+
}

src/stream/double_ended/mod.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ mod nth_back;
33
mod rfind;
44
mod rfold;
55
mod try_rfold;
6+
mod from_iter;
67

78
use next_back::NextBackFuture;
89
use nth_back::NthBackFuture;
910
use rfind::RFindFuture;
1011
use rfold::RFoldFuture;
1112
use try_rfold::TryRFoldFuture;
13+
pub use from_iter::{from_iter, FromIter};
1214

1315
extension_trait! {
1416
use crate::stream::Stream;
@@ -113,10 +115,9 @@ extension_trait! {
113115
```
114116
# fn main() { async_std::task::block_on(async {
115117
#
116-
use async_std::stream::Sample;
117-
use async_std::stream::double_ended::DoubleEndedStreamExt;
118+
use async_std::stream::double_ended::{self, DoubleEndedStreamExt};
118119
119-
let mut s = Sample::from(vec![7u8]);
120+
let mut s = double_ended::from_iter(vec![7u8]);
120121
121122
assert_eq!(s.next_back().await, Some(7));
122123
assert_eq!(s.next_back().await, None);
@@ -141,10 +142,9 @@ extension_trait! {
141142
```
142143
# fn main() { async_std::task::block_on(async {
143144
#
144-
use async_std::stream::Sample;
145-
use async_std::stream::double_ended::DoubleEndedStreamExt;
145+
use async_std::stream::double_ended::{self, DoubleEndedStreamExt};
146146
147-
let mut s = Sample::from(vec![1u8, 2, 3, 4, 5]);
147+
let mut s = double_ended::from_iter(vec![1u8, 2, 3, 4, 5]);
148148
149149
let second = s.nth_back(1).await;
150150
assert_eq!(second, Some(4));
@@ -172,10 +172,9 @@ extension_trait! {
172172
```
173173
# fn main() { async_std::task::block_on(async {
174174
#
175-
use async_std::stream::Sample;
176-
use async_std::stream::double_ended::DoubleEndedStreamExt;
175+
use async_std::stream::double_ended::{self, DoubleEndedStreamExt};
177176
178-
let mut s = Sample::from(vec![1u8, 2, 3, 4, 5]);
177+
let mut s = double_ended::from_iter(vec![1u8, 2, 3, 4, 5]);
179178
180179
let second = s.rfind(|v| v % 2 == 0).await;
181180
assert_eq!(second, Some(4));
@@ -202,10 +201,9 @@ extension_trait! {
202201
```
203202
# fn main() { async_std::task::block_on(async {
204203
#
205-
use async_std::stream::Sample;
206-
use async_std::stream::double_ended::DoubleEndedStreamExt;
204+
use async_std::stream::double_ended::{self, DoubleEndedStreamExt};
207205
208-
let s = Sample::from(vec![1, 2, 3, 4, 5]);
206+
let s = double_ended::from_iter(vec![1u8, 2, 3, 4, 5]);
209207
210208
let second = s.rfold(0, |acc, v| v + acc).await;
211209
@@ -237,10 +235,9 @@ extension_trait! {
237235
```
238236
# fn main() { async_std::task::block_on(async {
239237
#
240-
use async_std::stream::Sample;
241-
use async_std::stream::double_ended::DoubleEndedStreamExt;
238+
use async_std::stream::double_ended::{self, DoubleEndedStreamExt};
242239
243-
let s = Sample::from(vec![1, 2, 3, 4, 5]);
240+
let s = double_ended::from_iter(vec![1u8, 2, 3, 4, 5]);
244241
let sum = s.try_rfold(0, |acc, v| {
245242
if (acc+v) % 2 == 1 {
246243
Ok(v+3)

src/stream/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,6 @@ pub use once::{once, Once};
307307
pub use repeat::{repeat, Repeat};
308308
pub use repeat_with::{repeat_with, RepeatWith};
309309
pub use stream::*;
310-
pub use crate::stream::sample::Sample;
311310

312311
pub mod stream;
313312

@@ -317,7 +316,6 @@ mod from_iter;
317316
mod once;
318317
mod repeat;
319318
mod repeat_with;
320-
mod sample;
321319

322320
cfg_unstable! {
323321
pub mod double_ended;

src/stream/sample.rs

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)