manaba_sdk/
assignment.rs

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