gproxy_protocol/claude/common/tools/
support.rs1use 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}