Skip to main content

gproxy_protocol/protocol/claude/common/blocks/
misc.rs

1use 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}