diary_cli/
since.rs

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}