use config::ConfigError;
use serde::Deserialize;
use serde::Serialize;
use crate::errors::Error;
use crate::errors::Result;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct LeaseConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_cleanup_interval_ms")]
pub cleanup_interval_ms: u64,
#[serde(default = "default_max_cleanup_duration_ms")]
pub max_cleanup_duration_ms: u64,
}
fn default_cleanup_interval_ms() -> u64 {
1000
}
fn default_max_cleanup_duration_ms() -> u64 {
1
}
impl Default for LeaseConfig {
fn default() -> Self {
Self {
enabled: false, cleanup_interval_ms: default_cleanup_interval_ms(),
max_cleanup_duration_ms: default_max_cleanup_duration_ms(),
}
}
}
impl LeaseConfig {
pub fn validate(&self) -> Result<()> {
if !self.enabled {
return Ok(());
}
if !(100..=60_000).contains(&self.cleanup_interval_ms) {
return Err(Error::Config(ConfigError::Message(format!(
"lease cleanup_interval_ms must be between 100 and 60000, got {}",
self.cleanup_interval_ms
))));
}
if !(1..=100).contains(&self.max_cleanup_duration_ms) {
return Err(Error::Config(ConfigError::Message(format!(
"max_cleanup_duration_ms must be between 1 and 100, got {}",
self.max_cleanup_duration_ms
))));
}
Ok(())
}
}