1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
6#[serde(rename_all = "snake_case")]
7#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8pub enum TaskStatus {
9 #[default]
11 Working,
12 InputRequired,
14 Completed,
16 Failed,
18 Cancelled,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26pub struct TaskResult {
27 pub content_type: String,
29 pub value: Value,
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub summary: Option<String>,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
38#[serde(rename_all = "camelCase")]
39#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40pub struct Task {
41 pub task_id: String,
43 pub status: TaskStatus,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub status_message: Option<String>,
48 pub created_at: String,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub last_updated_at: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub ttl: Option<u64>,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub poll_interval: Option<u64>,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
65pub struct CreateTaskResult {
66 pub task: Task,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
71#[serde(rename_all = "camelCase")]
72#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
73pub struct TaskList {
74 pub tasks: Vec<Task>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub next_cursor: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub total: Option<u64>,
79}