summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2022-07-05 19:53:39 +0300
committerYuval Adam <_@yuv.al>2022-07-05 19:53:39 +0300
commitbb5e6272f4705c9cac65f66ca89f56558d33e08f (patch)
treea58f83bc952b5c6158268ec14ff6cb2120595545 /src
parentb15f60d0d74227c01860193ca9a8518ab35475ce (diff)
Explicitly implement NumberSource
Diffstat (limited to 'src')
-rw-r--r--src/main.rs17
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 {