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