pub(crate) const TTL_24_HOURS: u32 = 86_400;
pub(crate) const TTL_7_DAYS: u32 = 604_800;
pub(crate) const TTL_90_DAYS: u32 = 7_776_000;
pub(crate) const TTL_MAX: u32 = TTL_90_DAYS;
pub(crate) fn resolve(requested: Option<u64>, default_ttl: Option<u32>) -> Option<u32> {
match requested {
Some(0) => None,
Some(seconds) => Some(seconds.min(u64::from(TTL_MAX)) as u32),
None => match default_ttl {
Some(0) | None => None,
Some(seconds) => Some(seconds.min(TTL_MAX)),
},
}
}
pub(crate) fn describe(ttl: u32) -> String {
match ttl {
TTL_24_HOURS => "24 hours".to_string(),
TTL_7_DAYS => "7 days".to_string(),
TTL_90_DAYS => "90 days".to_string(),
s if s % 86_400 == 0 => format!("{} days", s / 86_400),
s if s % 3_600 == 0 => format!("{} hours", s / 3_600),
s if s % 60 == 0 => format!("{} minutes", s / 60),
s => format!("{s} seconds"),
}
}