use time::macros::format_description;
use time::{Date, Duration};
pub fn parse_date_key(date_key: &str) -> Option<Date> {
let trimmed = date_key.trim();
if trimmed.is_empty() {
return None;
}
Date::parse(trimmed, &format_description!("[year]-[month]-[day]")).ok()
}
pub fn format_date_key(date: Date) -> String {
format!(
"{:04}-{:02}-{:02}",
date.year(),
u8::from(date.month()),
date.day()
)
}
pub fn date_key_add_days(date_key: &str, delta_days: i64) -> Option<String> {
let date = parse_date_key(date_key)?;
let date = date.checked_add(Duration::days(delta_days))?;
Some(format_date_key(date))
}
pub fn previous_date_key(date_key: &str) -> Option<String> {
date_key_add_days(date_key, -1)
}