1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
use super::note::Note; use super::{meta::Meta, Idable}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Default, Clone)] pub struct TaskQuery { pub title: Option<String>, pub content: Option<String>, pub status: Option<String>, } #[derive(Serialize, Deserialize, Debug, Default)] pub struct Task { pub title: String, pub content: String, pub status: TaskStatus, pub(crate) meta: Meta, } impl From<Note> for Task { fn from(note: Note) -> Self { Task { content: note.content, title: note.title, meta: note.meta, ..Default::default() } } } impl Task { pub fn new(content: String) -> Self { Task { content, ..Default::default() } } pub fn with_title(content: String, title: String) -> Self { Task { content, title, ..Default::default() } } pub fn with_title_and_status(content: String, title: String, status: TaskStatus) -> Self { Task { content, title, status, ..Default::default() } } pub fn update_modified_date(&mut self) { self.meta.update_modified_date() } } impl Idable for Task { fn get_uuid(&self) -> uuid::Uuid { self.meta.uuid } } #[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Copy)] #[serde(rename_all = "lowercase")] pub enum TaskStatus { Open, Waiting, Closed, Deactivated, } impl Default for TaskStatus { fn default() -> Self { TaskStatus::Open } } impl TaskStatus { pub fn from(stst: String) -> Option<Self> { match stst.to_lowercase().as_str() { "closed" | "done" => Some(TaskStatus::Closed), "deactivated" | "expired" => Some(TaskStatus::Deactivated), "open" => Some(TaskStatus::Open), "waiting" | "delegated" | "scheduled" => Some(TaskStatus::Waiting), _ => None, } } } use super::Timestamp; impl PartialOrd<Timestamp> for Task { fn partial_cmp(&self, other: &Timestamp) -> Option<std::cmp::Ordering> { self.meta.partial_cmp(&other) } } impl PartialEq<Timestamp> for Task { fn eq(&self, other: &Timestamp) -> bool { self.meta == *other } }