1use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Message {
6 pub role: String, pub parts: Vec<MessagePart>,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11#[serde(tag = "kind", rename_all = "lowercase")]
12pub enum MessagePart {
13 Text {
14 text: String,
15 },
16 Data {
17 #[serde(rename = "mimeType")]
18 mime_type: String,
19 data: serde_json::Value,
20 },
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
24#[serde(rename_all = "lowercase")]
25pub enum TaskState {
26 Submitted,
27 Working,
28 Completed,
29 Failed,
30 Cancelled,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct Task {
35 pub id: String,
36 pub state: TaskState,
37 pub messages: Vec<Message>,
38 #[serde(rename = "createdAt")]
39 pub created_at: String,
40 #[serde(rename = "completedAt", skip_serializing_if = "Option::is_none")]
41 pub completed_at: Option<String>,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub error: Option<TaskError>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub usage: Option<serde_json::Value>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct TaskError {
50 pub code: String,
51 pub message: String,
52 pub recoverable: bool,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub details: Option<serde_json::Value>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct JsonRpcRequest {
59 pub jsonrpc: String, #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub id: Option<serde_json::Value>, pub method: String,
63 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub params: Option<serde_json::Value>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct JsonRpcResponse {
69 pub jsonrpc: String, pub id: serde_json::Value,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub result: Option<serde_json::Value>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub error: Option<JsonRpcError>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct JsonRpcError {
79 pub code: i32,
80 pub message: String,
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub data: Option<serde_json::Value>,
83}