use crate::v4::error::Result;
use serde::{Deserialize, Serialize};
const MIN_LEASE_TIME: u32 = 60;
const DRIFT: u32 = 10;
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct LeaseTime(u32);
impl LeaseTime {
pub const INFINITY: Self = Self(u32::MAX);
pub fn new(lease_time: u32) -> Result<Self> {
if lease_time < MIN_LEASE_TIME {
return Err("Lease time cant be less than the minimum lease time (60 seconds)");
}
Ok(Self(lease_time))
}
pub fn as_server(&self) -> u32 {
self.0
}
pub fn as_client(&self) -> u32 {
self.0 - DRIFT
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_min_lease_time_greater_than_drift() {
assert!(MIN_LEASE_TIME > DRIFT);
}
}