summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 55c435d..b6e9f06 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,11 +3,39 @@ use async_stream::stream;
use futures_util::pin_mut;
use futures_util::stream::StreamExt;
+use std::future::Future;
+use std::pin::Pin;
+use std::task::{Context, Poll};
+use std::time::{Duration, Instant};
+
+struct Delay {
+ when: Instant,
+}
+
+impl Future for Delay {
+ type Output = &'static str;
+
+ fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<&'static str> {
+ if Instant::now() >= self.when {
+ println!("Hello world");
+ Poll::Ready("done")
+ } else {
+ // Ignore this line for now.
+ cx.waker().wake_by_ref();
+ Poll::Pending
+ }
+ }
+}
+
#[tokio::main]
async fn main() {
let s = stream! {
+ let mut when = Instant::now();
for i in 0..3 {
+ let delay = Delay { when };
+ delay.await;
yield i;
+ when += Duration::from_millis(1000);
}
};