Skip to main content

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

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::{JsonObject, TypedObject};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(untagged)]
9#[non_exhaustive]
10pub enum ToolChoice {
11    Auto(ToolChoiceAuto),
12    Any(ToolChoiceAny),
13    Tool(ToolChoiceTool),
14    None(ToolChoiceNone),
15    Unknown(TypedObject),
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
19#[non_exhaustive]
20pub struct ToolChoiceAuto {
21    #[serde(rename = "type")]
22    pub type_: ToolChoiceAutoType,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub disable_parallel_tool_use: Option<bool>,
25    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
26    pub extra: JsonObject,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30#[non_exhaustive]
31pub enum ToolChoiceAutoType {
32    #[serde(rename = "auto")]
33    Auto,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[non_exhaustive]
38pub struct ToolChoiceAny {
39    #[serde(rename = "type")]
40    pub type_: ToolChoiceAnyType,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub disable_parallel_tool_use: Option<bool>,
43    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
44    pub extra: JsonObject,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48#[non_exhaustive]
49pub enum ToolChoiceAnyType {
50    #[serde(rename = "any")]
51    Any,
52}
53
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
55#[non_exhaustive]
56pub struct ToolChoiceTool {
57    pub name: String,
58    #[serde(rename = "type")]
59    pub type_: ToolChoiceToolType,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub disable_parallel_tool_use: Option<bool>,
62    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
63    pub extra: JsonObject,
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
67#[non_exhaustive]
68pub enum ToolChoiceToolType {
69    #[serde(rename = "tool")]
70    Tool,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
74#[non_exhaustive]
75pub struct ToolChoiceNone {
76    #[serde(rename = "type")]
77    pub type_: ToolChoiceNoneType,
78    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
79    pub extra: JsonObject,
80}
81
82#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
83#[non_exhaustive]
84pub enum ToolChoiceNoneType {
85    #[serde(rename = "none")]
86    None,
87}