phantom_protocol/runtime/
tokio_runtime.rs1use std::time::{Duration, Instant, SystemTime};
9
10use tokio::task::JoinHandle;
11
12use super::{BoxFuture, Runtime, SpawnHandle, SpawnHandleInner};
13
14#[derive(Clone, Copy, Default)]
17pub struct TokioRuntime;
18
19impl Runtime for TokioRuntime {
20 fn spawn(&self, fut: BoxFuture<()>) -> SpawnHandle {
21 let handle: JoinHandle<()> = tokio::spawn(fut);
22 SpawnHandle::from_inner(TokioSpawnHandle { handle })
23 }
24
25 fn sleep(&self, duration: Duration) -> BoxFuture<()> {
26 Box::pin(tokio::time::sleep(duration))
27 }
28
29 fn now_monotonic(&self) -> Instant {
30 Instant::now()
31 }
32
33 fn now_wall_clock(&self) -> SystemTime {
34 SystemTime::now()
35 }
36}
37
38pub(super) struct TokioSpawnHandle {
41 handle: JoinHandle<()>,
42}
43
44impl SpawnHandleInner for TokioSpawnHandle {
45 fn abort(&self) {
46 self.handle.abort();
47 }
48
49 fn is_finished(&self) -> bool {
50 self.handle.is_finished()
51 }
52}