use super::{ContentLeaseOwnerId, Duration, Error, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ContentLeaseOptions {
pub(in crate::content) owner_id: ContentLeaseOwnerId,
pub(in crate::content) ttl: Duration,
}
impl ContentLeaseOptions {
#[must_use]
pub const fn new(owner_id: ContentLeaseOwnerId, ttl: Duration) -> Self {
Self { owner_id, ttl }
}
#[must_use]
pub const fn owner_id(self) -> ContentLeaseOwnerId {
self.owner_id
}
#[must_use]
pub const fn ttl(self) -> Duration {
self.ttl
}
pub(crate) fn ttl_ms(self) -> Result<u64> {
let millis = u64::try_from(self.ttl.as_millis()).map_err(|_| {
Error::invalid_options("content lease lifetime milliseconds exceed u64::MAX")
})?;
if millis == 0 {
return Err(Error::invalid_options(
"content lease lifetime must be at least one millisecond",
));
}
Ok(millis)
}
}