summaryrefslogtreecommitdiff
path: root/src/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/task.rs')
-rw-r--r--src/task.rs30
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,
+ }
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback