Skip to main content

a2a_rs/domain/events/
task_events.rs

1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4use crate::domain::core::{message::Artifact, task::TaskStatus};
5
6/// Event for task status updates
7#[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, // Always "status-update"
14    pub status: TaskStatus,
15    #[serde(rename = "final")]
16    pub final_: bool,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub metadata: Option<Map<String, Value>>,
19}
20
21/// Event for task artifact updates
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct TaskArtifactUpdateEvent {
24    #[serde(rename = "taskId")]
25    pub task_id: String,
26    #[serde(rename = "contextId")]
27    pub context_id: String,
28    pub kind: String, // Always "artifact-update"
29    pub artifact: Artifact,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub append: Option<bool>,
32    #[serde(skip_serializing_if = "Option::is_none", rename = "lastChunk")]
33    pub last_chunk: Option<bool>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub metadata: Option<Map<String, Value>>,
36}