manaba_sdk/
assignment.rs

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, PartialEq, Eq)]
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}