From 17dc58c4a7ed7627820c53db9ade51a37637ba24 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 7 Oct 2025 15:51:48 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(retention):=20introduce=20mess?= =?UTF-8?q?age=20age=20enum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add MessageAge enum to represent retention periods in days, weeks, months, or years - implement Display trait for MessageAge to format retention periods - implement label function to generate retention label --- src/retention/message_age.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/retention/message_age.rs diff --git a/src/retention/message_age.rs b/src/retention/message_age.rs new file mode 100644 index 0000000..f70c0d7 --- /dev/null +++ b/src/retention/message_age.rs @@ -0,0 +1,36 @@ +use std::fmt::Display; + +/// Message age +#[derive(Debug)] +pub enum MessageAge { + /// Number of days to retain the message + Days(usize), + /// Number of weeks to retain the message + Weeks(usize), + /// Number of months to retain the message + Months(usize), + /// Number of years to retain the message + Years(usize), +} + +impl Display for MessageAge { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + MessageAge::Days(v) => write!(f, "d:{v}"), + MessageAge::Weeks(v) => write!(f, "w:{v}"), + MessageAge::Months(v) => write!(f, "m:{v}"), + MessageAge::Years(v) => write!(f, "y:{v}"), + } + } +} + +impl MessageAge { + pub(crate) fn label(&self) -> String { + match self { + MessageAge::Days(v) => format!("retention/{v}-days"), + MessageAge::Weeks(v) => format!("retention/:{v}-weeks"), + MessageAge::Months(v) => format!("retention/:{v}-months"), + MessageAge::Years(v) => format!("retention/:{v}-years"), + } + } +}