use serde::{Deserialize, Serialize};
use std::env;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetentionRule {
pub registry: String,
#[serde(default)]
pub name_glob: Option<String>,
#[serde(default)]
pub keep_last: Option<u32>,
#[serde(default)]
pub older_than_days: Option<u32>,
#[serde(default)]
pub exclude_tags: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetentionConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_retention_interval")]
pub interval: u64,
#[serde(default)]
pub dry_run: bool,
#[serde(default)]
pub rules: Vec<RetentionRule>,
}
fn default_retention_interval() -> u64 {
86400 }
impl Default for RetentionConfig {
fn default() -> Self {
Self {
enabled: false,
interval: 86400,
dry_run: false,
rules: Vec::new(),
}
}
}
impl RetentionConfig {
pub(super) fn apply_env_overrides(&mut self) {
if let Ok(val) = env::var("NORA_RETENTION_ENABLED") {
self.enabled = val.to_lowercase() == "true" || val == "1";
}
if let Ok(val) = env::var("NORA_RETENTION_INTERVAL") {
super::parse_env_warn("NORA_RETENTION_INTERVAL", &val, &mut self.interval);
}
if let Ok(val) = env::var("NORA_RETENTION_DRY_RUN") {
self.dry_run = val.to_lowercase() == "true" || val == "1";
}
}
}