use std::time::{Duration, Instant as MonotonicInstant};
#[derive(Clone, Copy, Debug)]
pub(crate) struct Expiration(Option<MonotonicInstant>);
impl Expiration {
pub(crate) fn after(ttl: Duration) -> Expiration {
Expiration(
crate::now::monotonic_time().and_then(|now| now.checked_add(ttl)),
)
}
pub(crate) const fn expired() -> Expiration {
Expiration(None)
}
pub(crate) fn is_expired(self) -> bool {
self.0.map_or(true, |t| {
let Some(now) = crate::now::monotonic_time() else { return true };
now > t
})
}
}