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