mojentic/llm/tools/ephemeral_task_manager/
task.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub enum TaskStatus {
7 Pending,
8 InProgress,
9 Completed,
10}
11
12impl TaskStatus {
13 pub fn as_str(&self) -> &'static str {
14 match self {
15 TaskStatus::Pending => "pending",
16 TaskStatus::InProgress => "in_progress",
17 TaskStatus::Completed => "completed",
18 }
19 }
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct Task {
25 pub id: usize,
26 pub description: String,
27 pub status: TaskStatus,
28}
29
30impl Task {
31 pub fn new(id: usize, description: String) -> Self {
33 Self {
34 id,
35 description,
36 status: TaskStatus::Pending,
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_task_creation() {
47 let task = Task::new(1, "Test task".to_string());
48 assert_eq!(task.id, 1);
49 assert_eq!(task.description, "Test task");
50 assert_eq!(task.status, TaskStatus::Pending);
51 }
52
53 #[test]
54 fn test_task_status_str() {
55 assert_eq!(TaskStatus::Pending.as_str(), "pending");
56 assert_eq!(TaskStatus::InProgress.as_str(), "in_progress");
57 assert_eq!(TaskStatus::Completed.as_str(), "completed");
58 }
59}