a2a_rs/domain/events/
task_events.rs1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4use crate::domain::core::{message::Artifact, task::TaskStatus};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct TaskStatusUpdateEvent {
9 #[serde(rename = "taskId")]
10 pub task_id: String,
11 #[serde(rename = "contextId")]
12 pub context_id: String,
13 pub kind: String, pub status: TaskStatus,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub metadata: Option<Map<String, Value>>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct TaskArtifactUpdateEvent {
22 #[serde(rename = "taskId")]
23 pub task_id: String,
24 #[serde(rename = "contextId")]
25 pub context_id: String,
26 pub kind: String, pub artifact: Artifact,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub append: Option<bool>,
30 #[serde(skip_serializing_if = "Option::is_none", rename = "lastChunk")]
31 pub last_chunk: Option<bool>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub metadata: Option<Map<String, Value>>,
34}
35
36impl From<crate::domain::generated::TaskStatusUpdateEvent> for TaskStatusUpdateEvent {
37 fn from(event: crate::domain::generated::TaskStatusUpdateEvent) -> Self {
38 let metadata = event.metadata.into_option().and_then(|s| {
39 if let Ok(serde_json::Value::Object(map)) = serde_json::to_value(s) {
40 Some(map)
41 } else {
42 None
43 }
44 });
45 Self {
46 task_id: event.task_id,
47 context_id: event.context_id,
48 kind: "status-update".to_string(),
49 status: event.status.into_option().unwrap_or_default(),
50 metadata,
51 }
52 }
53}
54
55impl From<crate::domain::generated::TaskArtifactUpdateEvent> for TaskArtifactUpdateEvent {
56 fn from(event: crate::domain::generated::TaskArtifactUpdateEvent) -> Self {
57 let metadata = event.metadata.into_option().and_then(|s| {
58 if let Ok(serde_json::Value::Object(map)) = serde_json::to_value(s) {
59 Some(map)
60 } else {
61 None
62 }
63 });
64 Self {
65 task_id: event.task_id,
66 context_id: event.context_id,
67 kind: "artifact-update".to_string(),
68 artifact: event.artifact.into_option().unwrap_or_default(),
69 append: Some(event.append),
70 last_chunk: Some(event.last_chunk),
71 metadata,
72 }
73 }
74}