diff --git a/src/retention/message_age.rs b/src/retention/message_age.rs index 199090f..7f5e541 100644 --- a/src/retention/message_age.rs +++ b/src/retention/message_age.rs @@ -4,13 +4,13 @@ use std::fmt::Display; #[derive(Debug)] pub enum MessageAge { /// Number of days to retain the message - Days(usize), + Days(i64), /// Number of weeks to retain the message - Weeks(usize), + Weeks(i64), /// Number of months to retain the message - Months(usize), + Months(i64), /// Number of years to retain the message - Years(usize), + Years(i64), } impl Display for MessageAge { @@ -26,7 +26,7 @@ impl Display for MessageAge { impl MessageAge { /// Create a new MessageAge enum - pub fn new(period: &str, count: usize) -> Self { + pub fn new(period: &str, count: i64) -> Self { match period.to_lowercase().as_str() { "days" => MessageAge::Days(count), "weeks" => MessageAge::Weeks(count), @@ -36,6 +36,19 @@ impl MessageAge { } } + pub(crate) fn parse(str: &str) -> Option { + let period = str.chars().nth(0).unwrap_or('x'); + let count = str[2..].to_string().parse::().unwrap_or(0); + + match period { + 'd' => Some(MessageAge::Days(count)), + 'w' => Some(MessageAge::Weeks(count)), + 'm' => Some(MessageAge::Months(count)), + 'y' => Some(MessageAge::Years(count)), + _ => None, + } + } + pub(crate) fn label(&self) -> String { match self { MessageAge::Days(v) => format!("retention/{v}-days"),