levi_core/entities/
task.rs1use myko::prelude::*;
2
3#[myko_subtype(derive(Default, Eq, Hash, PartialOrd, Ord, Copy))]
4pub enum Priority {
5 P0,
6 P1,
7 #[default]
8 P2,
9 P3,
10}
11
12impl Priority {
13 pub fn rank(self) -> u8 {
14 match self {
15 Priority::P0 => 0,
16 Priority::P1 => 1,
17 Priority::P2 => 2,
18 Priority::P3 => 3,
19 }
20 }
21
22 pub fn parse(s: &str) -> Option<Self> {
23 match s.to_ascii_lowercase().as_str() {
24 "p0" | "0" => Some(Priority::P0),
25 "p1" | "1" => Some(Priority::P1),
26 "p2" | "2" => Some(Priority::P2),
27 "p3" | "3" => Some(Priority::P3),
28 _ => None,
29 }
30 }
31
32 pub fn label(self) -> &'static str {
33 match self {
34 Priority::P0 => "P0",
35 Priority::P1 => "P1",
36 Priority::P2 => "P2",
37 Priority::P3 => "P3",
38 }
39 }
40}
41
42#[myko_item]
47pub struct Task {
48 pub project_id: String,
49 #[searchable]
50 pub title: String,
51 #[serde(default)]
52 #[searchable]
53 pub body: String,
54 #[serde(default)]
55 pub priority: Priority,
56 #[serde(default)]
57 pub labels: Vec<String>,
58 pub created_by_dev: String,
59 pub created_by_machine: String,
60 pub created: String,
64}