1use chrono::{NaiveDate, Duration, Utc};
2use soulog::*;
3
4pub fn get_days_since_2020(year: u16, month: u16, day: u16) -> Option<i64> {
5 let input_date = match NaiveDate::from_ymd_opt(year as i32, month as u32, day as u32) {
6 Some(x) => x,
7 None => return None,
8 };
9 let start_date = NaiveDate::from_ymd_opt(2020, 1, 1).unwrap();
10 let duration: Duration = input_date.signed_duration_since(start_date);
11 Some(duration.num_days())
12}
13
14pub fn since_2023(date: Option<Vec<u16>>, mut logger: impl Logger) {
15 match date {
16 Some(date) => match get_days_since_2020(date[0], date[1], date[2]) {
17 Some(x) => log!((logger.vital) Since("{}{x}", colour_format![green("Days inbetween "), cyan("2020 "), green("and "), cyan(&date[2].to_string()), blue("/"), cyan(&date[1].to_string()), blue("/"), cyan(&date[0].to_string()), blue(": ")]) as Log),
18 None => {
19 log!((logger.error) Since("Invalid date provided") as Fatal);
20 logger.crash()
21 }
22 },
23 None => {
24 let today = Utc::now().date_naive();
25 let start_date = NaiveDate::from_ymd_opt(2020, 1, 1).unwrap();
26 let days = today.signed_duration_since(start_date).num_days();
27 log!((logger.vital) Since("{}{days}", colour_format![green("Days since "), cyan("2020"), blue(": ")]) as Log)
28 }
29 }
30}