diff options
| author | Yuval Adam <_@yuv.al> | 2022-07-05 19:53:39 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2022-07-05 19:53:39 +0300 |
| commit | bb5e6272f4705c9cac65f66ca89f56558d33e08f (patch) | |
| tree | a58f83bc952b5c6158268ec14ff6cb2120595545 /src | |
| parent | b15f60d0d74227c01860193ca9a8518ab35475ce (diff) | |
Explicitly implement NumberSource
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 54e8529..2c31bd9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,7 +36,19 @@ fn number_source() -> impl Stream<Item = u8> { } } -fn double<S: Stream<Item = u8>>(input: S) -> impl Stream<Item = u8> { +struct NumberSource { + i: u32, +} + +impl Stream for NumberSource { + type Item = u32; + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { + self.i += 1; + Poll::Ready(Some(self.i)) + } +} + +fn double<S: Stream<Item = u32>>(input: S) -> impl Stream<Item = u32> { stream! { for await val in input { yield val * 2 @@ -46,7 +58,8 @@ fn double<S: Stream<Item = u8>>(input: S) -> impl Stream<Item = u8> { #[tokio::main] async fn main() { - let s = double(number_source()); + let number_source = NumberSource { i: 0 }; + let s = double(number_source); pin_mut!(s); // needed for iteration while let Some(value) = s.next().await { |
