gproxy_protocol/protocol/claude/common/blocks/
sources.rs1use serde::{Deserialize, Serialize};
2
3use super::super::{JsonObject, TypedObject};
4use super::{ImageBlock, TextBlock};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum ImageSource {
9 Base64(Base64ImageSource),
10 Url(UrlImageSource),
11 File(FileImageSource),
12 Raw(TypedObject),
13}
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16#[serde(untagged)]
17pub enum DocumentSource {
18 Base64(Base64PdfSource),
19 Text(PlainTextSource),
20 Content(ContentSource),
21 Url(UrlDocumentSource),
22 File(FileDocumentSource),
23 Raw(TypedObject),
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27pub struct Base64ImageSource {
28 pub data: String,
29 pub media_type: ImageMediaType,
30 #[serde(rename = "type")]
31 pub type_: Base64SourceType,
32 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
33 pub extra: JsonObject,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
37pub struct Base64PdfSource {
38 pub data: String,
39 pub media_type: PdfMediaType,
40 #[serde(rename = "type")]
41 pub type_: Base64SourceType,
42 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
43 pub extra: JsonObject,
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
47pub enum Base64SourceType {
48 #[serde(rename = "base64")]
49 Base64,
50}
51
52#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
53pub enum ImageMediaType {
54 #[serde(rename = "image/jpeg")]
55 Jpeg,
56 #[serde(rename = "image/png")]
57 Png,
58 #[serde(rename = "image/gif")]
59 Gif,
60 #[serde(rename = "image/webp")]
61 Webp,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
65pub enum PdfMediaType {
66 #[serde(rename = "application/pdf")]
67 ApplicationPdf,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
71pub struct UrlImageSource {
72 #[serde(rename = "type")]
73 pub type_: UrlSourceType,
74 pub url: String,
75 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
76 pub extra: JsonObject,
77}
78
79#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
80pub struct UrlDocumentSource {
81 #[serde(rename = "type")]
82 pub type_: UrlSourceType,
83 pub url: String,
84 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
85 pub extra: JsonObject,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
89pub enum UrlSourceType {
90 #[serde(rename = "url")]
91 Url,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95pub struct FileImageSource {
96 pub file_id: String,
97 #[serde(rename = "type")]
98 pub type_: FileSourceType,
99 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
100 pub extra: JsonObject,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104pub struct FileDocumentSource {
105 pub file_id: String,
106 #[serde(rename = "type")]
107 pub type_: FileSourceType,
108 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
109 pub extra: JsonObject,
110}
111
112#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
113pub enum FileSourceType {
114 #[serde(rename = "file")]
115 File,
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
119pub struct PlainTextSource {
120 pub data: String,
121 pub media_type: PlainTextMediaType,
122 #[serde(rename = "type")]
123 pub type_: TextSourceType,
124 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
125 pub extra: JsonObject,
126}
127
128#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
129pub enum PlainTextMediaType {
130 #[serde(rename = "text/plain")]
131 TextPlain,
132}
133
134#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
135pub enum TextSourceType {
136 #[serde(rename = "text")]
137 Text,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
141pub struct ContentSource {
142 pub content: ContentSourceContent,
143 #[serde(rename = "type")]
144 pub type_: ContentSourceType,
145 #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
146 pub extra: JsonObject,
147}
148
149#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
150pub enum ContentSourceType {
151 #[serde(rename = "content")]
152 Content,
153}
154
155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
156#[serde(untagged)]
157pub enum ContentSourceContent {
158 Text(String),
159 Blocks(Vec<ContentSourceBlock>),
160}
161
162#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
163#[serde(untagged)]
164pub enum ContentSourceBlock {
165 Text(TextBlock),
166 Image(ImageBlock),
167 Raw(TypedObject),
168}