1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use async_io::{Async, Timer};
use async_trait::async_trait;
use futures_core::Stream;
use reactor_trait::{AsyncIOHandle, IOHandle, Reactor};
use std::{
io,
time::{Duration, Instant},
};
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct AsyncIo;
#[async_trait]
impl Reactor for AsyncIo {
fn register(&self, socket: IOHandle) -> io::Result<Box<dyn AsyncIOHandle + Send>> {
Ok(Box::new(Async::new(socket)?))
}
async fn sleep(&self, dur: Duration) {
Timer::after(dur).await;
}
fn interval(&self, dur: Duration) -> Box<dyn Stream<Item = Instant>> {
Box::new(Timer::interval(dur))
}
}