gproxy_protocol/wire/claude/
files.rs1use crate::connection::{HttpBody, MultipartPart};
3use crate::{Rest, WireRequest, WireResponse};
4use serde::{Deserialize, Serialize};
5
6#[derive(
7 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
8)]
9#[serde(rename_all = "snake_case")]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11#[derive(gproxy_protocol_macros::DeclaredFields)]
12pub struct FileMetadata {
13 #[serde(
14 default,
15 deserialize_with = "present_nullable",
16 skip_serializing_if = "Option::is_none"
17 )]
18 pub expires_at: Option<Option<String>>,
19 pub id: String,
20 pub created_at: String,
21 pub filename: String,
22 pub mime_type: String,
23 pub size_bytes: i64,
24 #[serde(rename = "type")]
25 pub type_: FileType,
26 #[serde(
27 default,
28 deserialize_with = "present_optional",
29 skip_serializing_if = "Option::is_none"
30 )]
31 pub downloadable: Option<bool>,
32 #[serde(
33 default,
34 deserialize_with = "present_optional",
35 skip_serializing_if = "Option::is_none"
36 )]
37 pub scope: Option<FileScope>,
38 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
39 pub rest: Rest,
40}
41#[derive(
42 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
43)]
44#[serde(rename_all = "snake_case")]
45#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
46#[derive(gproxy_protocol_macros::DeclaredFields)]
47pub struct FileScope {
48 pub id: String,
49 #[serde(rename = "type")]
50 pub type_: FileScopeType,
51 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
52 pub rest: Rest,
53}
54#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
55#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
56#[derive(gproxy_protocol_macros::DeclaredFields)]
57pub enum FileType {
58 #[serde(rename = "file")]
59 File,
60}
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
62#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
63#[derive(gproxy_protocol_macros::DeclaredFields)]
64pub enum FileScopeType {
65 #[serde(rename = "session")]
66 Session,
67}
68#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
69#[serde(rename_all = "snake_case")]
70#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
71#[derive(gproxy_protocol_macros::DeclaredFields)]
72pub struct ListFilesQuery {
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub page: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub ids: Option<Vec<String>>,
77 #[serde(
78 default,
79 deserialize_with = "present_optional",
80 skip_serializing_if = "Option::is_none"
81 )]
82 pub after_id: Option<String>,
83 #[serde(
84 default,
85 deserialize_with = "present_optional",
86 skip_serializing_if = "Option::is_none"
87 )]
88 pub before_id: Option<String>,
89 #[serde(
90 default,
91 deserialize_with = "present_optional",
92 skip_serializing_if = "Option::is_none"
93 )]
94 pub limit: Option<i64>,
95 #[serde(
96 default,
97 deserialize_with = "present_optional",
98 skip_serializing_if = "Option::is_none"
99 )]
100 pub scope_id: Option<String>,
101 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
102 pub rest: Rest,
103}
104#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
105#[serde(rename_all = "snake_case")]
106#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
107#[derive(gproxy_protocol_macros::DeclaredFields)]
108pub struct ListFilesResponseBody {
109 #[serde(
110 default,
111 deserialize_with = "present_nullable",
112 skip_serializing_if = "Option::is_none"
113 )]
114 pub next_page: Option<Option<String>>,
115 pub data: Vec<FileMetadata>,
116 #[serde(
117 default,
118 deserialize_with = "present_optional",
119 skip_serializing_if = "Option::is_none"
120 )]
121 pub first_id: Option<String>,
122 #[serde(
123 default,
124 deserialize_with = "present_optional",
125 skip_serializing_if = "Option::is_none"
126 )]
127 pub has_more: Option<bool>,
128 #[serde(
129 default,
130 deserialize_with = "present_optional",
131 skip_serializing_if = "Option::is_none"
132 )]
133 pub last_id: Option<String>,
134 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
135 pub rest: Rest,
136}
137#[derive(
138 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
139)]
140#[serde(rename_all = "snake_case")]
141#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
142#[derive(gproxy_protocol_macros::DeclaredFields)]
143pub struct DeleteFileResponseBody {
144 pub id: String,
145 #[serde(
146 rename = "type",
147 default,
148 deserialize_with = "present_optional",
149 skip_serializing_if = "Option::is_none"
150 )]
151 pub type_: Option<DeletedFileType>,
152 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
153 pub rest: Rest,
154}
155#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
156#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
157#[derive(gproxy_protocol_macros::DeclaredFields)]
158pub enum DeletedFileType {
159 #[serde(rename = "file_deleted")]
160 FileDeleted,
161}
162#[derive(Debug, gproxy_protocol_macros::WireBuilder)]
163#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
164#[derive(gproxy_protocol_macros::DeclaredFields)]
165pub struct UploadFileForm {
166 pub expires_in_seconds: Option<i64>,
167 pub file: MultipartPart,
168}
169pub type UploadFileRequest = WireRequest<UploadFileForm>;
170pub type RawUploadFileRequest = WireRequest<crate::connection::Multipart>;
171pub type UploadFileResponse = WireResponse<FileMetadata>;
172pub type ListFilesRequest = WireRequest<()>;
173pub type ListFilesResponse = WireResponse<ListFilesResponseBody>;
174pub type ListFilesWireResponse = WireResponse<ListFilesResponseBody>;
175pub type RetrieveFileRequest = WireRequest<()>;
176pub type RetrieveFileResponse = WireResponse<FileMetadata>;
177pub type RetrieveFileContentRequest = WireRequest<()>;
178pub type RetrieveFileContentResponse = WireResponse<HttpBody>;
179pub type DeleteFileRequest = WireRequest<()>;
180pub type DeleteFileResponse = WireResponse<DeleteFileResponseBody>;
181pub type DeleteFileWireResponse = DeleteFileResponse;
182
183fn present_optional<'de, D, T>(d: D) -> Result<Option<T>, D::Error>
184where
185 D: serde::Deserializer<'de>,
186 T: Deserialize<'de>,
187{
188 T::deserialize(d).map(Some)
189}
190
191fn present_nullable<'de, D, T>(d: D) -> Result<Option<Option<T>>, D::Error>
192where
193 D: serde::Deserializer<'de>,
194 T: Deserialize<'de>,
195{
196 Option::<T>::deserialize(d).map(Some)
197}