use std::time::{Duration, SystemTime};
use ic_agent::agent::{QueryBuilder, UpdateBuilder};
use time::OffsetDateTime;
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Default)]
pub enum Expiry {
#[default]
Unspecified,
Delay(Duration),
DateTime(OffsetDateTime),
}
impl Expiry {
#[inline]
pub fn after(d: Duration) -> Self {
Self::Delay(d)
}
#[inline]
pub fn at(dt: impl Into<OffsetDateTime>) -> Self {
Self::DateTime(dt.into())
}
pub(crate) fn apply_to_update(self, u: UpdateBuilder<'_>) -> UpdateBuilder<'_> {
match self {
Expiry::Unspecified => u,
Expiry::Delay(d) => u.expire_after(d),
Expiry::DateTime(dt) => u.expire_at(dt),
}
}
pub(crate) fn apply_to_query(self, u: QueryBuilder<'_>) -> QueryBuilder<'_> {
match self {
Expiry::Unspecified => u,
Expiry::Delay(d) => u.expire_after(d),
Expiry::DateTime(dt) => u.expire_at(dt),
}
}
}
impl From<Duration> for Expiry {
fn from(d: Duration) -> Self {
Self::Delay(d)
}
}
impl From<SystemTime> for Expiry {
fn from(dt: SystemTime) -> Self {
Self::DateTime(dt.into())
}
}
impl From<OffsetDateTime> for Expiry {
fn from(dt: OffsetDateTime) -> Self {
Self::DateTime(dt)
}
}