diff options
Diffstat (limited to 'src/task.rs')
-rw-r--r-- | src/task.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/task.rs b/src/task.rs new file mode 100644 index 0000000..871d8ff --- /dev/null +++ b/src/task.rs @@ -0,0 +1,30 @@ +use std::cmp::Ordering; +use chrono::{NaiveDate, NaiveTime}; + +pub struct Task { + pub date: NaiveDate, + pub start_time: Option<NaiveTime>, + pub end_time: Option<NaiveTime>, + pub details: String, + pub tags: Vec<String>, +} + +pub fn cmp_tasks(a: &Task, b: &Task) -> Ordering { + if a.date != b.date { + return if a.date < b.date { Ordering::Less } else { Ordering::Greater }; + } + match [a.start_time, b.start_time] { + [None, None] => return Ordering::Equal, + [None, Some(_)] => return Ordering::Greater, + [Some(_), None] => return Ordering::Less, + [Some(atime), Some(btime)] => return if atime < btime { Ordering::Less } else { Ordering::Greater }, + } +} + +pub fn does_overlap(timespan_start: &NaiveTime, timespan_end: &NaiveTime, task: &Task) -> bool { + return match [task.start_time, task.end_time] { + [Some(start), Some(end)] => (&start <= timespan_start && timespan_start < &end) + || (&start < timespan_end && timespan_end < &end), + _ => false, + } +} |