🐛 fix(message_age): correct data type for message age count

- change the data type of count from usize to i64 to allow negative values
- add parse method to parse message age from string
This commit is contained in:
Jeremiah Russell
2025-10-10 22:40:27 +01:00
committed by Jeremiah Russell
parent d48abdc3ad
commit 49e7ff5617

View File

@@ -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<MessageAge> {
let period = str.chars().nth(0).unwrap_or('x');
let count = str[2..].to_string().parse::<i64>().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"),