Skip to main content

gproxy_protocol/claude/common/tools/
support.rs

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