Skip to main content

gproxy_protocol/wire/claude/
files.rs

1//! Source: upstream_docs/claude/docs/files/{upload,list,index,delete,download}.md.
2use 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}