gproxy_protocol/protocol/claude/common/blocks/
base.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::{CacheControl, Citation, CitationConfig, JsonObject};
6use super::{DocumentSource, ImageSource};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
9#[non_exhaustive]
10pub struct TextBlock {
11 pub text: String,
12 #[serde(rename = "type")]
13 pub type_: TextBlockType,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub cache_control: Option<CacheControl>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub citations: Option<Vec<Citation>>,
18 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
19 pub extra: JsonObject,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[non_exhaustive]
24pub enum TextBlockType {
25 #[serde(rename = "text")]
26 Text,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
30#[non_exhaustive]
31pub struct ImageBlock {
32 pub source: ImageSource,
33 #[serde(rename = "type")]
34 pub type_: ImageBlockType,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub cache_control: Option<CacheControl>,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40#[non_exhaustive]
41pub enum ImageBlockType {
42 #[serde(rename = "image")]
43 Image,
44}
45
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
47#[non_exhaustive]
48pub struct DocumentBlock {
49 pub source: DocumentSource,
50 #[serde(rename = "type")]
51 pub type_: DocumentBlockType,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub cache_control: Option<CacheControl>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub citations: Option<CitationConfig>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub context: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub title: Option<String>,
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
63#[non_exhaustive]
64pub enum DocumentBlockType {
65 #[serde(rename = "document")]
66 Document,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
70#[non_exhaustive]
71pub struct SearchResultBlock {
72 pub content: Vec<TextBlock>,
73 pub source: String,
74 pub title: String,
75 #[serde(rename = "type")]
76 pub type_: SearchResultBlockType,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub cache_control: Option<CacheControl>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub citations: Option<CitationConfig>,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84#[non_exhaustive]
85pub enum SearchResultBlockType {
86 #[serde(rename = "search_result")]
87 SearchResult,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
91#[non_exhaustive]
92pub struct ThinkingBlock {
93 pub signature: String,
94 pub thinking: String,
95 #[serde(rename = "type")]
96 pub type_: ThinkingBlockType,
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100#[non_exhaustive]
101pub enum ThinkingBlockType {
102 #[serde(rename = "thinking")]
103 Thinking,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
107#[non_exhaustive]
108pub struct RedactedThinkingBlock {
109 pub data: String,
110 #[serde(rename = "type")]
111 pub type_: RedactedThinkingBlockType,
112}
113
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115#[non_exhaustive]
116pub enum RedactedThinkingBlockType {
117 #[serde(rename = "redacted_thinking")]
118 RedactedThinking,
119}