Skip to main content

gproxy_protocol/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#[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}