Skip to main content

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