Skip to main content

gproxy_protocol/claude/common/blocks/
tool.rs

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}