1use serde::{Deserialize, Serialize};
2
3use super::super::{
4 CacheControl, Caller, JsonObject, ServerToolUseName, WebSearchToolResultContent,
5};
6use super::content::{McpToolResultContent, ToolResultContent};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
9#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
10pub struct ToolUseBlock {
11 pub id: String,
12 pub input: JsonObject,
13 pub name: String,
14 #[serde(rename = "type")]
15 pub type_: ToolUseBlockType,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub cache_control: Option<CacheControl>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub caller: Option<Caller>,
20 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
21 pub rest: serde_json::Map<String, serde_json::Value>,
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
25#[non_exhaustive]
26pub enum ToolUseBlockType {
27 #[serde(rename = "tool_use")]
28 ToolUse,
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
32#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
33pub struct ToolResultBlock {
34 pub tool_use_id: String,
35 #[serde(rename = "type")]
36 pub type_: ToolResultBlockType,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub cache_control: Option<CacheControl>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub content: Option<ToolResultContent>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub is_error: Option<bool>,
43 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
44 pub rest: serde_json::Map<String, serde_json::Value>,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48#[non_exhaustive]
49pub enum ToolResultBlockType {
50 #[serde(rename = "tool_result")]
51 ToolResult,
52}
53
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
55#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
56pub struct ToolReferenceBlock {
57 pub tool_name: String,
58 #[serde(rename = "type")]
59 pub type_: ToolReferenceBlockType,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub cache_control: Option<CacheControl>,
62 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
63 pub rest: serde_json::Map<String, serde_json::Value>,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[non_exhaustive]
68pub enum ToolReferenceBlockType {
69 #[serde(rename = "tool_reference")]
70 ToolReference,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct ServerToolUseBlock {
76 pub id: String,
77 pub input: JsonObject,
78 pub name: ServerToolUseName,
79 #[serde(rename = "type")]
80 pub type_: ServerToolUseBlockType,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub cache_control: Option<CacheControl>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 pub caller: Option<Caller>,
85 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
86 pub rest: serde_json::Map<String, serde_json::Value>,
87}
88
89#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
90#[non_exhaustive]
91pub enum ServerToolUseBlockType {
92 #[serde(rename = "server_tool_use")]
93 ServerToolUse,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
97#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
98pub struct WebSearchToolResultBlock {
99 pub content: WebSearchToolResultContent,
100 pub tool_use_id: String,
101 #[serde(rename = "type")]
102 pub type_: WebSearchToolResultBlockType,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub cache_control: Option<CacheControl>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub caller: Option<Caller>,
107 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
108 pub rest: serde_json::Map<String, serde_json::Value>,
109}
110
111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
112#[non_exhaustive]
113pub enum WebSearchToolResultBlockType {
114 #[serde(rename = "web_search_tool_result")]
115 WebSearchToolResult,
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
119#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
120pub struct WebSearchResultBlock {
121 pub encrypted_content: String,
122 pub title: String,
123 #[serde(rename = "type")]
124 pub type_: WebSearchResultBlockType,
125 pub url: String,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub page_age: Option<String>,
128 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
129 pub rest: serde_json::Map<String, serde_json::Value>,
130}
131
132#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
133#[non_exhaustive]
134pub enum WebSearchResultBlockType {
135 #[serde(rename = "web_search_result")]
136 WebSearchResult,
137}
138
139#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
140#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
141pub struct McpToolUseBlock {
142 pub id: String,
143 pub input: JsonObject,
144 pub name: String,
145 pub server_name: String,
146 #[serde(rename = "type")]
147 pub type_: McpToolUseBlockType,
148 #[serde(skip_serializing_if = "Option::is_none")]
149 pub cache_control: Option<CacheControl>,
150 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
151 pub rest: serde_json::Map<String, serde_json::Value>,
152}
153
154#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
155#[non_exhaustive]
156pub enum McpToolUseBlockType {
157 #[serde(rename = "mcp_tool_use")]
158 McpToolUse,
159}
160
161#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
162#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
163pub struct McpToolResultBlock {
164 pub tool_use_id: String,
165 #[serde(rename = "type")]
166 pub type_: McpToolResultBlockType,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub cache_control: Option<CacheControl>,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub content: Option<McpToolResultContent>,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub is_error: Option<bool>,
173 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
174 pub rest: serde_json::Map<String, serde_json::Value>,
175}
176
177#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
178#[non_exhaustive]
179pub enum McpToolResultBlockType {
180 #[serde(rename = "mcp_tool_result")]
181 McpToolResult,
182}