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