1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use crate::types::{Artifact, Message};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
10pub enum TaskState {
11 #[serde(rename = "TASK_STATE_UNSPECIFIED")]
13 Unspecified,
14 #[serde(rename = "TASK_STATE_SUBMITTED")]
16 Submitted,
17 #[serde(rename = "TASK_STATE_WORKING")]
19 Working,
20 #[serde(rename = "TASK_STATE_COMPLETED")]
22 Completed,
23 #[serde(rename = "TASK_STATE_FAILED")]
25 Failed,
26 #[serde(rename = "TASK_STATE_CANCELED")]
28 Canceled,
29 #[serde(rename = "TASK_STATE_REJECTED")]
31 Rejected,
32 #[serde(rename = "TASK_STATE_INPUT_REQUIRED")]
34 InputRequired,
35 #[serde(rename = "TASK_STATE_AUTH_REQUIRED")]
37 AuthRequired,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
42pub struct TaskStatus {
43 pub state: TaskState,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub message: Option<Message>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub timestamp: Option<String>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
55pub struct Task {
56 pub id: String,
58 #[serde(rename = "contextId", skip_serializing_if = "Option::is_none")]
60 pub context_id: Option<String>,
61 pub status: TaskStatus,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub artifacts: Option<Vec<Artifact>>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub history: Option<Vec<Message>>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub metadata: Option<HashMap<String, serde_json::Value>>,
72}