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(
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}