gproxy_protocol/protocol/claude/common/blocks/
misc.rs1use serde::{Deserialize, Serialize};
2
3use super::super::{CacheControl, ClaudeModel, JsonObject, TypedObject};
4use super::TextBlock;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
7#[non_exhaustive]
8pub struct ContainerUploadBlock {
9 pub file_id: String,
10 #[serde(rename = "type")]
11 pub type_: ContainerUploadBlockType,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub cache_control: Option<CacheControl>,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
17#[non_exhaustive]
18pub enum ContainerUploadBlockType {
19 #[serde(rename = "container_upload")]
20 ContainerUpload,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
24#[non_exhaustive]
25pub struct CompactionBlock {
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub content: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub encrypted_content: Option<String>,
30 #[serde(rename = "type")]
31 pub type_: CompactionBlockType,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub cache_control: Option<CacheControl>,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
37#[non_exhaustive]
38pub enum CompactionBlockType {
39 #[serde(rename = "compaction")]
40 Compaction,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
44#[non_exhaustive]
45pub struct MidConversationSystemBlock {
46 pub content: Vec<MidConversationSystemContentBlock>,
47 #[serde(rename = "type")]
48 pub type_: MidConversationSystemBlockType,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub cache_control: Option<CacheControl>,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54#[serde(untagged)]
55#[non_exhaustive]
56pub enum MidConversationSystemContentBlock {
57 Text(TextBlock),
58 ToolAddition(ToolAdditionBlock),
59 ToolRemoval(ToolRemovalBlock),
60 Raw(TypedObject),
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
64#[non_exhaustive]
65pub struct ToolAdditionBlock {
66 pub tool: ToolChangeReference,
67 #[serde(rename = "type")]
68 pub type_: ToolAdditionBlockType,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub cache_control: Option<CacheControl>,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
74#[non_exhaustive]
75pub struct ToolRemovalBlock {
76 pub tool: ToolChangeReference,
77 #[serde(rename = "type")]
78 pub type_: ToolRemovalBlockType,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub cache_control: Option<CacheControl>,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84#[serde(untagged)]
85#[non_exhaustive]
86pub enum ToolChangeReference {
87 McpTool(McpToolChangeReference),
88 McpToolset(McpToolsetChangeReference),
89 Tool(ToolChangeToolReference),
90 Raw(TypedObject),
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
94#[non_exhaustive]
95pub struct ToolChangeToolReference {
96 pub name: String,
97 #[serde(rename = "type")]
98 pub type_: ToolChangeToolReferenceType,
99}
100
101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
102#[non_exhaustive]
103pub struct McpToolChangeReference {
104 pub name: String,
105 pub server_name: String,
106 #[serde(rename = "type")]
107 pub type_: McpToolChangeReferenceType,
108}
109
110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
111#[non_exhaustive]
112pub struct McpToolsetChangeReference {
113 pub server_name: String,
114 #[serde(rename = "type")]
115 pub type_: McpToolsetChangeReferenceType,
116}
117
118#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
119#[non_exhaustive]
120pub enum ToolAdditionBlockType {
121 #[serde(rename = "tool_addition")]
122 ToolAddition,
123}
124
125#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
126#[non_exhaustive]
127pub enum ToolRemovalBlockType {
128 #[serde(rename = "tool_removal")]
129 ToolRemoval,
130}
131
132#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
133#[non_exhaustive]
134pub enum ToolChangeToolReferenceType {
135 #[serde(rename = "tool_reference")]
136 ToolReference,
137}
138
139#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
140#[non_exhaustive]
141pub enum McpToolChangeReferenceType {
142 #[serde(rename = "mcp_tool_reference")]
143 McpToolReference,
144}
145
146#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
147#[non_exhaustive]
148pub enum McpToolsetChangeReferenceType {
149 #[serde(rename = "mcp_toolset_reference")]
150 McpToolsetReference,
151}
152
153#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
154#[non_exhaustive]
155pub enum MidConversationSystemBlockType {
156 #[serde(rename = "mid_conv_system")]
157 MidConversationSystem,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[non_exhaustive]
162pub struct FallbackBlock {
163 pub from: FallbackInfo,
164 pub to: FallbackInfo,
165 #[serde(rename = "type")]
166 pub type_: FallbackBlockType,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub trigger: Option<serde_json::Value>,
169}
170
171#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
172#[non_exhaustive]
173pub struct FallbackInfo {
174 pub model: ClaudeModel,
175 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
176 pub extra: JsonObject,
177}
178
179#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
180#[non_exhaustive]
181pub enum FallbackBlockType {
182 #[serde(rename = "fallback")]
183 Fallback,
184}