gproxy_protocol/protocol/claude/common/blocks/
tool.rs1use 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#[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}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[non_exhaustive]
24pub enum ToolUseBlockType {
25 #[serde(rename = "tool_use")]
26 ToolUse,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
30#[non_exhaustive]
31pub struct ToolResultBlock {
32 pub tool_use_id: String,
33 #[serde(rename = "type")]
34 pub type_: ToolResultBlockType,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub cache_control: Option<CacheControl>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub content: Option<ToolResultContent>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub is_error: Option<bool>,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[non_exhaustive]
45pub enum ToolResultBlockType {
46 #[serde(rename = "tool_result")]
47 ToolResult,
48}
49
50#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
51#[non_exhaustive]
52pub struct ToolReferenceBlock {
53 pub tool_name: String,
54 #[serde(rename = "type")]
55 pub type_: ToolReferenceBlockType,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub cache_control: Option<CacheControl>,
58}
59
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
61#[non_exhaustive]
62pub enum ToolReferenceBlockType {
63 #[serde(rename = "tool_reference")]
64 ToolReference,
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
68#[non_exhaustive]
69pub struct ServerToolUseBlock {
70 pub id: String,
71 pub input: JsonObject,
72 pub name: ServerToolUseName,
73 #[serde(rename = "type")]
74 pub type_: ServerToolUseBlockType,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub cache_control: Option<CacheControl>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub caller: Option<Caller>,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
82#[non_exhaustive]
83pub enum ServerToolUseBlockType {
84 #[serde(rename = "server_tool_use")]
85 ServerToolUse,
86}
87
88#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
89#[non_exhaustive]
90pub struct WebSearchToolResultBlock {
91 pub content: WebSearchToolResultContent,
92 pub tool_use_id: String,
93 #[serde(rename = "type")]
94 pub type_: WebSearchToolResultBlockType,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub cache_control: Option<CacheControl>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub caller: Option<Caller>,
99}
100
101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
102#[non_exhaustive]
103pub enum WebSearchToolResultBlockType {
104 #[serde(rename = "web_search_tool_result")]
105 WebSearchToolResult,
106}
107
108#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
109#[non_exhaustive]
110pub struct WebSearchResultBlock {
111 pub encrypted_content: String,
112 pub title: String,
113 #[serde(rename = "type")]
114 pub type_: WebSearchResultBlockType,
115 pub url: String,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub page_age: Option<String>,
118}
119
120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
121#[non_exhaustive]
122pub enum WebSearchResultBlockType {
123 #[serde(rename = "web_search_result")]
124 WebSearchResult,
125}
126
127#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
128#[non_exhaustive]
129pub struct McpToolUseBlock {
130 pub id: String,
131 pub input: JsonObject,
132 pub name: String,
133 pub server_name: String,
134 #[serde(rename = "type")]
135 pub type_: McpToolUseBlockType,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub cache_control: Option<CacheControl>,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
141#[non_exhaustive]
142pub enum McpToolUseBlockType {
143 #[serde(rename = "mcp_tool_use")]
144 McpToolUse,
145}
146
147#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
148#[non_exhaustive]
149pub struct McpToolResultBlock {
150 pub tool_use_id: String,
151 #[serde(rename = "type")]
152 pub type_: McpToolResultBlockType,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub cache_control: Option<CacheControl>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub content: Option<McpToolResultContent>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub is_error: Option<bool>,
159}
160
161#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
162#[non_exhaustive]
163pub enum McpToolResultBlockType {
164 #[serde(rename = "mcp_tool_result")]
165 McpToolResult,
166}