taskboard_core_lib/
task.rs1#![deny(missing_docs)]
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
13pub struct Task {
14 pub number: usize,
16 pub title: String,
18 pub status: Status,
20 pub remaining_work: Option<u8>,
22}
23
24#[derive(Clone, Debug, Deserialize, Serialize)]
26pub struct ProjectTasks {
27 pub project_name: String,
29 pub tasks: Vec<Task>,
31}
32
33#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)]
35pub enum Status {
36 Todo,
38 Doing,
40 Done,
42}
43
44impl Task {
45 pub fn new(number: usize, title: &str) -> Self {
47 Task {
48 number,
49 title: String::from(title),
50 status: Status::Todo,
51 remaining_work: None,
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn new_should_set_status_to_todo() {
62 assert_eq!(Task::new(1, "").status, Status::Todo);
63 }
64
65 #[test]
66 fn new_should_not_set_remaining_work() {
67 assert_eq!(Task::new(1, "").remaining_work, None);
68 }
69}