dope_core/driver/schedule/
wait.rs1use std::{marker, time};
4
5use o3::cell::region;
6
7#[must_use]
10#[derive(Clone, Copy, Debug, PartialEq, Eq)]
11#[repr(transparent)]
12pub struct Wait<'d> {
13 deadline: Option<time::Instant>,
14 _driver: marker::PhantomData<fn(&'d ()) -> &'d ()>,
15}
16
17impl<'d> Wait<'d> {
18 pub fn event(_region: ®ion::Token<'d>) -> Self {
19 Self {
20 deadline: None,
21 _driver: marker::PhantomData,
22 }
23 }
24
25 pub fn until(_region: ®ion::Token<'d>, deadline: time::Instant) -> Self {
26 Self {
27 deadline: Some(deadline),
28 _driver: marker::PhantomData,
29 }
30 }
31
32 pub const fn deadline(self) -> Option<time::Instant> {
33 self.deadline
34 }
35
36 pub(super) fn reduce(self, other: Self) -> Self {
37 let deadline = match (self.deadline, other.deadline) {
38 (Some(left), Some(right)) => Some(left.min(right)),
39 (left, right) => left.or(right),
40 };
41 Self {
42 deadline,
43 _driver: marker::PhantomData,
44 }
45 }
46}