systemprompt_models/a2a/
task.rs1use super::artifact::Artifact;
2use super::message::Message;
3use super::task_metadata::TaskMetadata;
4use serde::{Deserialize, Serialize};
5use systemprompt_identifiers::{ContextId, TaskId};
6
7#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
8pub struct Task {
9 pub id: TaskId,
10 #[serde(rename = "contextId")]
11 pub context_id: ContextId,
12 pub status: TaskStatus,
13 pub history: Option<Vec<Message>>,
14 pub artifacts: Option<Vec<Artifact>>,
15 pub metadata: Option<TaskMetadata>,
16 #[serde(rename = "kind")]
17 pub kind: String,
18}
19
20impl Default for Task {
21 fn default() -> Self {
22 Self {
23 id: TaskId::generate(),
24 context_id: ContextId::generate(),
25 status: TaskStatus::default(),
26 history: None,
27 artifacts: None,
28 metadata: None,
29 kind: "task".to_string(),
30 }
31 }
32}
33
34#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
35pub struct TaskStatus {
36 pub state: TaskState,
37 pub message: Option<Message>,
38 pub timestamp: Option<chrono::DateTime<chrono::Utc>>,
39}
40
41impl Default for TaskStatus {
42 fn default() -> Self {
43 Self {
44 state: TaskState::Submitted,
45 message: None,
46 timestamp: None,
47 }
48 }
49}
50
51#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
52pub enum TaskState {
53 #[serde(rename = "pending")]
54 Pending,
55 #[serde(rename = "submitted")]
56 Submitted,
57 #[serde(rename = "working")]
58 Working,
59 #[serde(rename = "completed")]
60 Completed,
61 #[serde(rename = "failed")]
62 Failed,
63 #[serde(rename = "canceled")]
64 Canceled,
65 #[serde(rename = "rejected")]
66 Rejected,
67 #[serde(rename = "input-required")]
68 InputRequired,
69 #[serde(rename = "auth-required")]
70 AuthRequired,
71 #[serde(rename = "unknown")]
72 Unknown,
73}
74
75impl std::str::FromStr for TaskState {
76 type Err = String;
77
78 fn from_str(s: &str) -> Result<Self, Self::Err> {
79 match s {
80 "pending" => Ok(Self::Pending),
81 "submitted" => Ok(Self::Submitted),
82 "working" => Ok(Self::Working),
83 "completed" => Ok(Self::Completed),
84 "failed" => Ok(Self::Failed),
85 "canceled" => Ok(Self::Canceled),
86 "rejected" => Ok(Self::Rejected),
87 "input-required" => Ok(Self::InputRequired),
88 "auth-required" => Ok(Self::AuthRequired),
89 "unknown" => Ok(Self::Unknown),
90 _ => Err(format!("Invalid task state: {s}")),
91 }
92 }
93}