Skip to main content

brainwires_a2a/
params.rs

1//! Typed request parameter structs for all A2A methods.
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use crate::agent_card::AgentCard;
7use crate::push_notification::TaskPushNotificationConfig;
8use crate::task::{Task, TaskState};
9use crate::types::Message;
10
11/// Configuration for a send-message request.
12#[derive(Debug, Clone, Default, Serialize, Deserialize)]
13pub struct SendMessageConfiguration {
14    /// Accepted output media types.
15    #[serde(
16        rename = "acceptedOutputModes",
17        skip_serializing_if = "Option::is_none"
18    )]
19    pub accepted_output_modes: Option<Vec<String>>,
20    /// Push notification configuration.
21    #[serde(
22        rename = "taskPushNotificationConfig",
23        skip_serializing_if = "Option::is_none"
24    )]
25    pub task_push_notification_config: Option<TaskPushNotificationConfig>,
26    /// Max number of history messages to return.
27    #[serde(rename = "historyLength", skip_serializing_if = "Option::is_none")]
28    pub history_length: Option<i32>,
29    /// If true, return immediately without waiting for terminal/interrupted state.
30    #[serde(rename = "returnImmediately", skip_serializing_if = "Option::is_none")]
31    pub return_immediately: Option<bool>,
32}
33
34/// Request parameters for `message/send` and `message/stream`.
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct SendMessageRequest {
37    /// Optional tenant identifier.
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub tenant: Option<String>,
40    /// The message to send.
41    pub message: Message,
42    /// Request configuration.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub configuration: Option<SendMessageConfiguration>,
45    /// Custom metadata.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub metadata: Option<HashMap<String, serde_json::Value>>,
48}
49
50/// Request parameters for `tasks/get`.
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct GetTaskRequest {
53    /// Optional tenant identifier.
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub tenant: Option<String>,
56    /// Task identifier.
57    pub id: String,
58    /// Max number of history messages to return.
59    #[serde(rename = "historyLength", skip_serializing_if = "Option::is_none")]
60    pub history_length: Option<i32>,
61}
62
63/// Request parameters for `tasks/list`.
64#[derive(Debug, Clone, Default, Serialize, Deserialize)]
65pub struct ListTasksRequest {
66    /// Optional tenant identifier.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub tenant: Option<String>,
69    /// Filter by context ID.
70    #[serde(rename = "contextId", skip_serializing_if = "Option::is_none")]
71    pub context_id: Option<String>,
72    /// Filter by task state.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub status: Option<TaskState>,
75    /// Maximum number of tasks to return.
76    #[serde(rename = "pageSize", skip_serializing_if = "Option::is_none")]
77    pub page_size: Option<i32>,
78    /// Pagination token.
79    #[serde(rename = "pageToken", skip_serializing_if = "Option::is_none")]
80    pub page_token: Option<String>,
81    /// Max history messages per task.
82    #[serde(rename = "historyLength", skip_serializing_if = "Option::is_none")]
83    pub history_length: Option<i32>,
84    /// Filter tasks with status updated after this ISO 8601 timestamp.
85    #[serde(
86        rename = "statusTimestampAfter",
87        skip_serializing_if = "Option::is_none"
88    )]
89    pub status_timestamp_after: Option<String>,
90    /// Whether to include artifacts.
91    #[serde(rename = "includeArtifacts", skip_serializing_if = "Option::is_none")]
92    pub include_artifacts: Option<bool>,
93}
94
95/// Response for `tasks/list`.
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct ListTasksResponse {
98    /// Matching tasks.
99    pub tasks: Vec<Task>,
100    /// Pagination token for next page.
101    #[serde(rename = "nextPageToken")]
102    pub next_page_token: String,
103    /// Page size used.
104    #[serde(rename = "pageSize")]
105    pub page_size: i32,
106    /// Total number of matching tasks.
107    #[serde(rename = "totalSize")]
108    pub total_size: i32,
109}
110
111/// Request parameters for `tasks/cancel`.
112#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct CancelTaskRequest {
114    /// Optional tenant identifier.
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub tenant: Option<String>,
117    /// Task identifier.
118    pub id: String,
119    /// Custom metadata.
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub metadata: Option<HashMap<String, serde_json::Value>>,
122}
123
124/// Request parameters for `tasks/resubscribe`.
125#[derive(Debug, Clone, Serialize, Deserialize)]
126pub struct SubscribeToTaskRequest {
127    /// Optional tenant identifier.
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub tenant: Option<String>,
130    /// Task identifier.
131    pub id: String,
132}
133
134/// Request for `tasks/pushNotificationConfig/get`.
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct GetTaskPushNotificationConfigRequest {
137    /// Optional tenant identifier.
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub tenant: Option<String>,
140    /// Parent task identifier.
141    #[serde(rename = "taskId")]
142    pub task_id: String,
143    /// Configuration identifier.
144    #[serde(rename = "configId")]
145    pub config_id: String,
146}
147
148/// Request for `tasks/pushNotificationConfig/delete`.
149#[derive(Debug, Clone, Serialize, Deserialize)]
150pub struct DeleteTaskPushNotificationConfigRequest {
151    /// Optional tenant identifier.
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub tenant: Option<String>,
154    /// Parent task identifier.
155    #[serde(rename = "taskId")]
156    pub task_id: String,
157    /// Configuration identifier.
158    #[serde(rename = "configId")]
159    pub config_id: String,
160}
161
162/// Request for `tasks/pushNotificationConfig/list`.
163#[derive(Debug, Clone, Serialize, Deserialize)]
164pub struct ListTaskPushNotificationConfigsRequest {
165    /// Optional tenant identifier.
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub tenant: Option<String>,
168    /// Parent task identifier.
169    #[serde(rename = "taskId")]
170    pub task_id: String,
171    /// Maximum configs to return.
172    #[serde(rename = "pageSize", skip_serializing_if = "Option::is_none")]
173    pub page_size: Option<i32>,
174    /// Pagination token.
175    #[serde(rename = "pageToken", skip_serializing_if = "Option::is_none")]
176    pub page_token: Option<String>,
177}
178
179/// Response for listing push notification configs.
180#[derive(Debug, Clone, Serialize, Deserialize)]
181pub struct ListTaskPushNotificationConfigsResponse {
182    /// The configs.
183    pub configs: Vec<TaskPushNotificationConfig>,
184    /// Pagination token for next page.
185    #[serde(rename = "nextPageToken", skip_serializing_if = "Option::is_none")]
186    pub next_page_token: Option<String>,
187}
188
189/// Request for `agent/authenticatedExtendedCard`.
190#[derive(Debug, Clone, Default, Serialize, Deserialize)]
191pub struct GetExtendedAgentCardRequest {
192    /// Optional tenant identifier.
193    #[serde(skip_serializing_if = "Option::is_none")]
194    pub tenant: Option<String>,
195}
196
197/// Response for the extended agent card.
198pub type GetExtendedAgentCardResponse = AgentCard;