1use chrono::NaiveDateTime;
2
3#[derive(Debug, PartialEq, Eq)]
4pub enum AssignmentState {
5 Todo,
6 Done,
7}
8
9#[derive(Debug)]
10pub struct AssignmentDate {
11 pub date: NaiveDateTime,
12 pub importance_level: AssignmentImportanceLevel,
13}
14
15#[derive(Debug)]
16pub enum AssignmentImportanceLevel {
17 None,
18 Low,
19 Medium,
20 High,
21}
22
23impl AssignmentDate {
24 pub fn new(date: &str) -> Self {
25 const DATE_FORMAT: &str = "%Y-%m-%d %H:%M";
26 let date = NaiveDateTime::parse_from_str(date, DATE_FORMAT).unwrap();
27 let importance_level = AssignmentImportanceLevel::from(date);
28
29 AssignmentDate {
30 date,
31 importance_level,
32 }
33 }
34}
35
36impl From<NaiveDateTime> for AssignmentImportanceLevel {
37 fn from(date: NaiveDateTime) -> Self {
38 let today: chrono::NaiveDate = chrono::Local::now().date_naive();
39 let due_date: chrono::NaiveDate = date.date();
40
41 if due_date < today {
42 AssignmentImportanceLevel::None
43 } else {
44 let tomorrow = today + chrono::Duration::days(1);
45 let one_week_later = today + chrono::Duration::days(7);
46
47 if due_date <= tomorrow {
48 AssignmentImportanceLevel::High
49 } else if due_date <= one_week_later {
50 AssignmentImportanceLevel::Medium
51 } else {
52 AssignmentImportanceLevel::Low
53 }
54 }
55 }
56}