1use super::wire::present_nullable;
6use super::{RealtimeFunctionTool, RealtimeMcphttpError};
7use crate::Rest;
8use serde::{Deserialize, Serialize};
9
10pub type RealtimeToolsConfig = Vec<RealtimeToolsConfigUnion>;
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
16#[serde(untagged)]
17#[allow(clippy::large_enum_variant)]
18#[derive(gproxy_protocol_macros::DeclaredFields)]
19pub enum RealtimeToolsConfigUnion {
20 RealtimeFunctionTool(RealtimeFunctionTool),
21 RealtimeToolsConfigUnionMcp(RealtimeToolsConfigUnionMcp),
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27#[derive(gproxy_protocol_macros::DeclaredFields)]
28pub struct RealtimeMcpApprovalResponse {
29 pub id: String,
30 pub approval_request_id: String,
31 pub approve: bool,
32 #[serde(rename = "type")]
33 pub type_: RealtimeMcpApprovalResponseType,
34 #[serde(
35 default,
36 deserialize_with = "present_nullable",
37 skip_serializing_if = "Option::is_none"
38 )]
39 pub reason: Option<Option<String>>,
40 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
41 pub rest: Rest,
42}
43
44#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
46#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
47#[derive(gproxy_protocol_macros::DeclaredFields)]
48pub struct RealtimeMcpListTools {
49 pub server_label: String,
50 pub tools: Vec<RealtimeMcpListToolsTool>,
51 #[serde(rename = "type")]
52 pub type_: RealtimeMcpListToolsType,
53 #[serde(
54 default,
55 deserialize_with = "present_nullable",
56 skip_serializing_if = "Option::is_none"
57 )]
58 pub id: Option<Option<String>>,
59 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
60 pub rest: Rest,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
65#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
66#[derive(gproxy_protocol_macros::DeclaredFields)]
67pub struct RealtimeMcpToolCall {
68 pub id: String,
69 pub arguments: String,
70 pub name: String,
71 pub server_label: String,
72 #[serde(rename = "type")]
73 pub type_: RealtimeMcpToolCallType,
74 #[serde(
75 default,
76 deserialize_with = "present_nullable",
77 skip_serializing_if = "Option::is_none"
78 )]
79 pub approval_request_id: Option<Option<String>>,
80 #[serde(
81 default,
82 deserialize_with = "present_nullable",
83 skip_serializing_if = "Option::is_none"
84 )]
85 pub error: Option<Option<RealtimeMcpToolCallError>>,
86 #[serde(
87 default,
88 deserialize_with = "present_nullable",
89 skip_serializing_if = "Option::is_none"
90 )]
91 pub output: Option<Option<String>>,
92 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
93 pub rest: Rest,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
98#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
99#[derive(gproxy_protocol_macros::DeclaredFields)]
100pub struct RealtimeMcpApprovalRequest {
101 pub id: String,
102 pub arguments: String,
103 pub name: String,
104 pub server_label: String,
105 #[serde(rename = "type")]
106 pub type_: RealtimeMcpApprovalRequestType,
107 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
108 pub rest: Rest,
109}
110
111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
113#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
114#[derive(gproxy_protocol_macros::DeclaredFields)]
115pub struct RealtimeToolsConfigUnionMcp {
116 pub server_label: String,
117 #[serde(rename = "type")]
118 pub type_: RealtimeToolsConfigUnionMcpType,
119 #[serde(
120 default,
121 deserialize_with = "present_nullable",
122 skip_serializing_if = "Option::is_none"
123 )]
124 pub allowed_callers: Option<Option<Vec<RealtimeToolsConfigUnionMcpAllowedCallersItem>>>,
125 #[serde(
126 default,
127 deserialize_with = "present_nullable",
128 skip_serializing_if = "Option::is_none"
129 )]
130 pub allowed_tools: Option<Option<RealtimeToolsConfigUnionMcpAllowedTools>>,
131 #[serde(
132 default,
133 deserialize_with = "present_nullable",
134 skip_serializing_if = "Option::is_none"
135 )]
136 pub authorization: Option<Option<String>>,
137 #[serde(
138 default,
139 deserialize_with = "present_nullable",
140 skip_serializing_if = "Option::is_none"
141 )]
142 pub connector_id: Option<Option<RealtimeToolsConfigUnionMcpConnectorId>>,
143 #[serde(
144 default,
145 deserialize_with = "present_nullable",
146 skip_serializing_if = "Option::is_none"
147 )]
148 pub defer_loading: Option<Option<bool>>,
149 #[serde(
150 default,
151 deserialize_with = "present_nullable",
152 skip_serializing_if = "Option::is_none"
153 )]
154 pub headers: Option<Option<std::collections::BTreeMap<String, String>>>,
155 #[serde(
156 default,
157 deserialize_with = "present_nullable",
158 skip_serializing_if = "Option::is_none"
159 )]
160 pub require_approval: Option<Option<RealtimeToolsConfigUnionMcpRequireApproval>>,
161 #[serde(
162 default,
163 deserialize_with = "present_nullable",
164 skip_serializing_if = "Option::is_none"
165 )]
166 pub server_description: Option<Option<String>>,
167 #[serde(
168 default,
169 deserialize_with = "present_nullable",
170 skip_serializing_if = "Option::is_none"
171 )]
172 pub server_url: Option<Option<String>>,
173 #[serde(
174 default,
175 deserialize_with = "present_nullable",
176 skip_serializing_if = "Option::is_none"
177 )]
178 pub tunnel_id: Option<Option<String>>,
179 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
180 pub rest: Rest,
181}
182
183#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
185#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
186#[derive(gproxy_protocol_macros::DeclaredFields)]
187pub struct RealtimeMcpListToolsTool {
188 pub input_schema: serde_json::Value,
189 pub name: String,
190 #[serde(
191 default,
192 deserialize_with = "present_nullable",
193 skip_serializing_if = "Option::is_none"
194 )]
195 pub annotations: Option<Option<serde_json::Value>>,
196 #[serde(
197 default,
198 deserialize_with = "present_nullable",
199 skip_serializing_if = "Option::is_none"
200 )]
201 pub description: Option<Option<String>>,
202 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
203 pub rest: Rest,
204}
205
206#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
208#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
209#[serde(untagged)]
210#[derive(gproxy_protocol_macros::DeclaredFields)]
211pub enum RealtimeMcpToolCallError {
212 RealtimeMcpProtocolError(RealtimeMcpProtocolError),
213 RealtimeMcpToolExecutionError(RealtimeMcpToolExecutionError),
214 RealtimeMcphttpError(RealtimeMcphttpError),
215 Variant4(()),
216}
217
218#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
220#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
221#[serde(untagged)]
222#[derive(gproxy_protocol_macros::DeclaredFields)]
223pub enum RealtimeToolsConfigUnionMcpAllowedTools {
224 Items(Vec<String>),
225 RealtimeToolsConfigUnionMcpAllowedToolsMcpToolFilter(
226 RealtimeToolsConfigUnionMcpAllowedToolsMcpToolFilter,
227 ),
228 Variant3(()),
229}
230
231#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
233#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
234#[serde(untagged)]
235#[derive(gproxy_protocol_macros::DeclaredFields)]
236pub enum RealtimeToolsConfigUnionMcpRequireApproval {
237 RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilter(
238 RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilter,
239 ),
240 Literal(RealtimeToolsConfigUnionMcpRequireApprovalVariant2),
241 Variant3(()),
242}
243
244#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
246#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
247#[derive(gproxy_protocol_macros::DeclaredFields)]
248pub struct RealtimeMcpProtocolError {
249 pub code: i64,
250 pub message: String,
251 #[serde(rename = "type")]
252 pub type_: RealtimeMcpProtocolErrorType,
253 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
254 pub rest: Rest,
255}
256
257#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
259#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
260#[derive(gproxy_protocol_macros::DeclaredFields)]
261pub struct RealtimeMcpToolExecutionError {
262 pub message: String,
263 #[serde(rename = "type")]
264 pub type_: RealtimeMcpToolExecutionErrorType,
265 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
266 pub rest: Rest,
267}
268
269#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
271#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
272#[derive(gproxy_protocol_macros::DeclaredFields)]
273pub struct RealtimeToolsConfigUnionMcpAllowedToolsMcpToolFilter {
274 #[serde(
275 default,
276 deserialize_with = "present_nullable",
277 skip_serializing_if = "Option::is_none"
278 )]
279 pub read_only: Option<Option<bool>>,
280 #[serde(
281 default,
282 deserialize_with = "present_nullable",
283 skip_serializing_if = "Option::is_none"
284 )]
285 pub tool_names: Option<Option<Vec<String>>>,
286 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
287 pub rest: Rest,
288}
289
290#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
292#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
293#[derive(gproxy_protocol_macros::DeclaredFields)]
294pub struct RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilter {
295 #[serde(
296 default,
297 deserialize_with = "present_nullable",
298 skip_serializing_if = "Option::is_none"
299 )]
300 pub always:
301 Option<Option<RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilterAlways>>,
302 #[serde(
303 default,
304 deserialize_with = "present_nullable",
305 skip_serializing_if = "Option::is_none"
306 )]
307 pub never: Option<Option<RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilterNever>>,
308 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
309 pub rest: Rest,
310}
311
312#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
314#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
315#[derive(gproxy_protocol_macros::DeclaredFields)]
316pub struct RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilterAlways {
317 #[serde(
318 default,
319 deserialize_with = "present_nullable",
320 skip_serializing_if = "Option::is_none"
321 )]
322 pub read_only: Option<Option<bool>>,
323 #[serde(
324 default,
325 deserialize_with = "present_nullable",
326 skip_serializing_if = "Option::is_none"
327 )]
328 pub tool_names: Option<Option<Vec<String>>>,
329 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
330 pub rest: Rest,
331}
332
333#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
335#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
336#[derive(gproxy_protocol_macros::DeclaredFields)]
337pub struct RealtimeToolsConfigUnionMcpRequireApprovalMcpToolApprovalFilterNever {
338 #[serde(
339 default,
340 deserialize_with = "present_nullable",
341 skip_serializing_if = "Option::is_none"
342 )]
343 pub read_only: Option<Option<bool>>,
344 #[serde(
345 default,
346 deserialize_with = "present_nullable",
347 skip_serializing_if = "Option::is_none"
348 )]
349 pub tool_names: Option<Option<Vec<String>>>,
350 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
351 pub rest: Rest,
352}
353
354#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
355#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
356#[derive(gproxy_protocol_macros::DeclaredFields)]
357pub enum RealtimeMcpApprovalResponseType {
358 #[serde(rename = "mcp_approval_response")]
359 McpApprovalResponse,
360}
361
362#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
363#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
364#[derive(gproxy_protocol_macros::DeclaredFields)]
365pub enum RealtimeMcpListToolsType {
366 #[serde(rename = "mcp_list_tools")]
367 McpListTools,
368}
369
370#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
371#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
372#[derive(gproxy_protocol_macros::DeclaredFields)]
373pub enum RealtimeMcpToolCallType {
374 #[serde(rename = "mcp_call")]
375 McpCall,
376}
377
378#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
379#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
380#[derive(gproxy_protocol_macros::DeclaredFields)]
381pub enum RealtimeMcpApprovalRequestType {
382 #[serde(rename = "mcp_approval_request")]
383 McpApprovalRequest,
384}
385
386#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
387#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
388#[derive(gproxy_protocol_macros::DeclaredFields)]
389pub enum RealtimeToolsConfigUnionMcpType {
390 #[serde(rename = "mcp")]
391 Mcp,
392}
393
394#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
395#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
396#[derive(gproxy_protocol_macros::DeclaredFields)]
397pub enum RealtimeToolsConfigUnionMcpAllowedCallersItem {
398 #[serde(rename = "direct")]
399 Direct,
400 #[serde(rename = "programmatic")]
401 Programmatic,
402}
403
404#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
405#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
406#[derive(gproxy_protocol_macros::DeclaredFields)]
407pub enum RealtimeToolsConfigUnionMcpConnectorId {
408 #[serde(rename = "connector_dropbox")]
409 ConnectorDropbox,
410 #[serde(rename = "connector_gmail")]
411 ConnectorGmail,
412 #[serde(rename = "connector_googlecalendar")]
413 ConnectorGooglecalendar,
414 #[serde(rename = "connector_googledrive")]
415 ConnectorGoogledrive,
416 #[serde(rename = "connector_microsoftteams")]
417 ConnectorMicrosoftteams,
418 #[serde(rename = "connector_outlookcalendar")]
419 ConnectorOutlookcalendar,
420 #[serde(rename = "connector_outlookemail")]
421 ConnectorOutlookemail,
422 #[serde(rename = "connector_sharepoint")]
423 ConnectorSharepoint,
424}
425
426#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
427#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
428#[derive(gproxy_protocol_macros::DeclaredFields)]
429pub enum RealtimeToolsConfigUnionMcpRequireApprovalVariant2 {
430 #[serde(rename = "always")]
431 Always,
432 #[serde(rename = "never")]
433 Never,
434}
435
436#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
437#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
438#[derive(gproxy_protocol_macros::DeclaredFields)]
439pub enum RealtimeMcpProtocolErrorType {
440 #[serde(rename = "protocol_error")]
441 ProtocolError,
442}
443
444#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
445#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
446#[derive(gproxy_protocol_macros::DeclaredFields)]
447pub enum RealtimeMcpToolExecutionErrorType {
448 #[serde(rename = "tool_execution_error")]
449 ToolExecutionError,
450}