Skip to main content

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

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