gproxy-protocol 2.2.3

GPROXY protocol types and endpoint metadata
Documentation
use serde::{Deserialize, Serialize};

use super::super::{CacheControl, Caller, JsonObject, WebSearchResultBlock};
use super::{
    AdvisorRedactedResultBlock, AdvisorResultBlock, AdvisorToolResultError,
    BashCodeExecutionResultBlock, BashCodeExecutionToolResultError, CodeExecutionResultBlock,
    CodeExecutionToolResultError, EncryptedCodeExecutionResultBlock,
    TextEditorCodeExecutionCreateResultBlock, TextEditorCodeExecutionStrReplaceResultBlock,
    TextEditorCodeExecutionToolResultError, TextEditorCodeExecutionViewResultBlock,
    ToolSearchToolResultError, ToolSearchToolSearchResultBlock, WebFetchResultBlock,
    WebFetchToolResultError, WebSearchToolResultError,
};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum WebSearchToolResultContent {
    Error(WebSearchToolResultError),
    Results(Vec<WebSearchResultBlock>),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum WebFetchToolResultContent {
    Error(WebFetchToolResultError),
    Result(WebFetchResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum AdvisorToolResultContent {
    Error(AdvisorToolResultError),
    Result(AdvisorResultBlock),
    Redacted(AdvisorRedactedResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CodeExecutionToolResultContent {
    Error(CodeExecutionToolResultError),
    Result(CodeExecutionResultBlock),
    Encrypted(EncryptedCodeExecutionResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum BashCodeExecutionToolResultContent {
    Error(BashCodeExecutionToolResultError),
    Result(BashCodeExecutionResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum TextEditorCodeExecutionToolResultContent {
    Error(TextEditorCodeExecutionToolResultError),
    View(TextEditorCodeExecutionViewResultBlock),
    Create(TextEditorCodeExecutionCreateResultBlock),
    StrReplace(TextEditorCodeExecutionStrReplaceResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ToolSearchToolResultContent {
    Error(ToolSearchToolResultError),
    Result(ToolSearchToolSearchResultBlock),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct WebFetchToolResultBlock {
    pub content: WebFetchToolResultContent,
    pub tool_use_id: String,
    #[serde(rename = "type")]
    pub type_: WebFetchToolResultBlockType,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cache_control: Option<CacheControl>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub caller: Option<Caller>,
    #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
    pub extra: JsonObject,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WebFetchToolResultBlockType {
    #[serde(rename = "web_fetch_tool_result")]
    WebFetchToolResult,
}

macro_rules! server_tool_result_block {
    ($block:ident, $content:ident, $tag:ident, $wire:literal, $variant:ident) => {
        #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
        pub struct $block {
            pub content: $content,
            pub tool_use_id: String,
            #[serde(rename = "type")]
            pub type_: $tag,
            #[serde(skip_serializing_if = "Option::is_none")]
            pub cache_control: Option<CacheControl>,
            #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
            pub extra: JsonObject,
        }

        #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
        pub enum $tag {
            #[serde(rename = $wire)]
            $variant,
        }
    };
}

server_tool_result_block!(
    AdvisorToolResultBlock,
    AdvisorToolResultContent,
    AdvisorToolResultBlockType,
    "advisor_tool_result",
    AdvisorToolResult
);
server_tool_result_block!(
    CodeExecutionToolResultBlock,
    CodeExecutionToolResultContent,
    CodeExecutionToolResultBlockType,
    "code_execution_tool_result",
    CodeExecutionToolResult
);
server_tool_result_block!(
    BashCodeExecutionToolResultBlock,
    BashCodeExecutionToolResultContent,
    BashCodeExecutionToolResultBlockType,
    "bash_code_execution_tool_result",
    BashCodeExecutionToolResult
);
server_tool_result_block!(
    TextEditorCodeExecutionToolResultBlock,
    TextEditorCodeExecutionToolResultContent,
    TextEditorCodeExecutionToolResultBlockType,
    "text_editor_code_execution_tool_result",
    TextEditorCodeExecutionToolResult
);
server_tool_result_block!(
    ToolSearchToolResultBlock,
    ToolSearchToolResultContent,
    ToolSearchToolResultBlockType,
    "tool_search_tool_result",
    ToolSearchToolResult
);