From bb5e6272f4705c9cac65f66ca89f56558d33e08f Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Tue, 5 Jul 2022 19:53:39 +0300 Subject: Explicitly implement NumberSource --- src/main.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/main.rs') 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 { } } -fn double>(input: S) -> impl Stream { +struct NumberSource { + i: u32, +} + +impl Stream for NumberSource { + type Item = u32; + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.i += 1; + Poll::Ready(Some(self.i)) + } +} + +fn double>(input: S) -> impl Stream { stream! { for await val in input { yield val * 2 @@ -46,7 +58,8 @@ fn double>(input: S) -> impl Stream { #[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 { -- cgit v1.3.1