Skip to main content

gproxy_protocol/claude/common/server_tools/
response_results.rs

1use serde::{Deserialize, Serialize};
2
3use super::super::{Caller, JsonObject, ResponseWebSearchResultBlock};
4use super::{
5    AdvisorToolResultBlockType, AdvisorToolResultError, BashCodeExecutionResultBlock,
6    BashCodeExecutionToolResultBlockType, BashCodeExecutionToolResultError,
7    CodeExecutionResultBlock, CodeExecutionToolResultBlockType, CodeExecutionToolResultError,
8    EncryptedCodeExecutionResultBlock, ResponseAdvisorRedactedResultBlock,
9    ResponseAdvisorResultBlock, ResponseTextEditorCodeExecutionStrReplaceResultBlock,
10    ResponseTextEditorCodeExecutionToolResultError, ResponseTextEditorCodeExecutionViewResultBlock,
11    ResponseToolSearchToolResultError, ResponseToolSearchToolSearchResultBlock,
12    ResponseWebFetchResultBlock, TextEditorCodeExecutionCreateResultBlock,
13    TextEditorCodeExecutionToolResultBlockType, ToolSearchToolResultBlockType,
14    WebFetchToolResultBlockType, WebFetchToolResultError, WebSearchToolResultError,
15};
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18#[serde(untagged)]
19#[non_exhaustive]
20pub enum ResponseWebSearchToolResultContent {
21    Error(WebSearchToolResultError),
22    Results(Vec<ResponseWebSearchResultBlock>),
23    Raw(serde_json::Value),
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27#[serde(untagged)]
28#[non_exhaustive]
29pub enum ResponseWebFetchToolResultContent {
30    Error(WebFetchToolResultError),
31    Result(ResponseWebFetchResultBlock),
32    Raw(serde_json::Value),
33}
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36#[serde(untagged)]
37#[non_exhaustive]
38pub enum ResponseAdvisorToolResultContent {
39    Error(AdvisorToolResultError),
40    Result(ResponseAdvisorResultBlock),
41    Redacted(ResponseAdvisorRedactedResultBlock),
42    Raw(serde_json::Value),
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46#[serde(untagged)]
47#[non_exhaustive]
48pub enum ResponseCodeExecutionToolResultContent {
49    Error(CodeExecutionToolResultError),
50    Result(CodeExecutionResultBlock),
51    Encrypted(EncryptedCodeExecutionResultBlock),
52    Raw(serde_json::Value),
53}
54
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
56#[serde(untagged)]
57#[non_exhaustive]
58pub enum ResponseBashCodeExecutionToolResultContent {
59    Error(BashCodeExecutionToolResultError),
60    Result(BashCodeExecutionResultBlock),
61    Raw(serde_json::Value),
62}
63
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
65#[serde(untagged)]
66#[non_exhaustive]
67pub enum ResponseTextEditorCodeExecutionToolResultContent {
68    Error(ResponseTextEditorCodeExecutionToolResultError),
69    View(ResponseTextEditorCodeExecutionViewResultBlock),
70    Create(TextEditorCodeExecutionCreateResultBlock),
71    StrReplace(ResponseTextEditorCodeExecutionStrReplaceResultBlock),
72    Raw(serde_json::Value),
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76#[serde(untagged)]
77#[non_exhaustive]
78pub enum ResponseToolSearchToolResultContent {
79    Error(ResponseToolSearchToolResultError),
80    Result(ResponseToolSearchToolSearchResultBlock),
81    Raw(serde_json::Value),
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
85#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
86pub struct ResponseWebFetchToolResultBlock {
87    pub content: ResponseWebFetchToolResultContent,
88    pub tool_use_id: String,
89    #[serde(rename = "type")]
90    pub type_: WebFetchToolResultBlockType,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub caller: Option<Caller>,
93    #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
94    pub rest: serde_json::Map<String, serde_json::Value>,
95}
96
97macro_rules! response_server_tool_result_block {
98    ($block:ident, $content:ident, $tag:ident) => {
99        #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100        pub struct $block {
101            pub content: $content,
102            pub tool_use_id: String,
103            #[serde(rename = "type")]
104            pub type_: $tag,
105            #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
106            pub rest: serde_json::Map<String, serde_json::Value>,
107        }
108    };
109}
110
111response_server_tool_result_block!(
112    ResponseAdvisorToolResultBlock,
113    ResponseAdvisorToolResultContent,
114    AdvisorToolResultBlockType
115);
116response_server_tool_result_block!(
117    ResponseCodeExecutionToolResultBlock,
118    ResponseCodeExecutionToolResultContent,
119    CodeExecutionToolResultBlockType
120);
121response_server_tool_result_block!(
122    ResponseBashCodeExecutionToolResultBlock,
123    ResponseBashCodeExecutionToolResultContent,
124    BashCodeExecutionToolResultBlockType
125);
126response_server_tool_result_block!(
127    ResponseTextEditorCodeExecutionToolResultBlock,
128    ResponseTextEditorCodeExecutionToolResultContent,
129    TextEditorCodeExecutionToolResultBlockType
130);
131response_server_tool_result_block!(
132    ResponseToolSearchToolResultBlock,
133    ResponseToolSearchToolResultContent,
134    ToolSearchToolResultBlockType
135);