From c81cd6d6ccf3381111e0a0942f63aac147679a1d Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Wed, 8 Oct 2025 12:02:32 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(config):=20add=20delete=20flag?= =?UTF-8?q?=20for=20retention=20rules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - allow retention rules to be configured to delete messages - add `delete` flag to `add_rule` function - add `set_command` function to `EolRule` to set the action to delete --- src/config.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/config.rs b/src/config.rs index 2dca26d..5d4f017 100644 --- a/src/config.rs +++ b/src/config.rs @@ -11,7 +11,7 @@ mod eol_rule; use eol_rule::EolRule; -use crate::{Error, MessageAge, Retention}; +use crate::{Error, MessageAge, Retention, eol_cmd::EolAction}; /// Configuration file for the program #[derive(Debug, Serialize, Deserialize)] @@ -29,10 +29,10 @@ impl Default for Config { rules, }; - cfg.add_rule(Retention::new(MessageAge::Years(1), true), None) - .add_rule(Retention::new(MessageAge::Weeks(1), true), None) - .add_rule(Retention::new(MessageAge::Months(1), true), None) - .add_rule(Retention::new(MessageAge::Years(5), true), None); + cfg.add_rule(Retention::new(MessageAge::Years(1), true), None, false) + .add_rule(Retention::new(MessageAge::Weeks(1), true), None, false) + .add_rule(Retention::new(MessageAge::Months(1), true), None, false) + .add_rule(Retention::new(MessageAge::Years(5), true), None, false); cfg } @@ -51,7 +51,12 @@ impl Config { } /// Add a new rule to the rule set by setting the retention age - pub fn add_rule(&mut self, retention: Retention, label: Option<&String>) -> &mut Self { + pub fn add_rule( + &mut self, + retention: Retention, + label: Option<&String>, + delete: bool, + ) -> &mut Self { if self.rules.contains_key(&retention.age().to_string()) && label.is_none() { log::warn!("rule already exists"); return self; @@ -79,6 +84,9 @@ impl Config { if let Some(l) = label { rule.add_label(l); } + if delete { + rule.set_command(EolAction::Delete); + } log::info!("added rule: {rule}"); self.rules.insert(rule.retention().to_string(), rule); self