Skip to main content

gproxy_protocol/protocol/claude/common/tools/
support.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::{CacheControl, JsonObject, JsonSchemaObjectType};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
8pub struct ToolCommon {
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub allowed_callers: Option<Vec<ToolCaller>>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub cache_control: Option<CacheControl>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub defer_loading: Option<bool>,
15    #[serde(default, skip_serializing_if = "Vec::is_empty")]
16    pub input_examples: Vec<JsonObject>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub strict: Option<bool>,
19    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
20    pub extra: JsonObject,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
24pub struct ToolCommonWithoutInputExamples {
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub allowed_callers: Option<Vec<ToolCaller>>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub cache_control: Option<CacheControl>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub defer_loading: Option<bool>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub strict: Option<bool>,
33    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
34    pub extra: JsonObject,
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
38pub struct JsonSchema {
39    #[serde(rename = "type")]
40    pub type_: JsonSchemaObjectType,
41    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
42    pub properties: JsonObject,
43    #[serde(default, skip_serializing_if = "Vec::is_empty")]
44    pub required: Vec<String>,
45    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
46    pub extra: JsonObject,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
50pub enum CustomToolType {
51    #[serde(rename = "custom")]
52    Custom,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub enum ToolCaller {
57    #[serde(rename = "direct")]
58    Direct,
59    #[serde(rename = "code_execution_20250825")]
60    CodeExecution20250825,
61    #[serde(rename = "code_execution_20260120")]
62    CodeExecution20260120,
63    #[serde(rename = "code_execution_20260521")]
64    CodeExecution20260521,
65}