Skip to main content

gproxy_protocol/claude/
files.rs

1use serde::{Deserialize, Serialize};
2
3use super::common::{AnthropicBetaHeaders, DeletedFileObjectType, FileObjectType};
4
5pub type FileRequestHeaders = AnthropicBetaHeaders;
6
7/// Multipart form fields for `POST /v1/files`.
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
9#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
10pub struct UploadFileRequestBody {
11    pub file: String,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub expires_in_seconds: Option<u64>,
14    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
15    pub rest: serde_json::Map<String, serde_json::Value>,
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
19#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
20pub struct ListFilesQuery {
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub after_id: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub before_id: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub limit: Option<u64>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub scope_id: Option<String>,
29    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
30    pub rest: serde_json::Map<String, serde_json::Value>,
31}
32
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
34#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
35pub struct FilePath {
36    pub file_id: String,
37    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
38    pub rest: serde_json::Map<String, serde_json::Value>,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
42#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
43pub struct FileMetadata {
44    pub id: String,
45    pub created_at: String,
46    pub filename: String,
47    pub mime_type: String,
48    pub size_bytes: u64,
49    #[serde(rename = "type")]
50    pub type_: FileObjectType,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub downloadable: Option<bool>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub scope: Option<FileScope>,
55    /// GA responses include this as either an RFC 3339 timestamp or `null`.
56    /// It remains optional so responses selected by the legacy beta header decode.
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub expires_at: Option<String>,
59    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
60    pub rest: serde_json::Map<String, serde_json::Value>,
61}
62
63pub type UploadFileResponseBody = FileMetadata;
64pub type RetrieveFileResponseBody = FileMetadata;
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
67#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
68pub struct ListFilesResponseBody {
69    pub data: Vec<FileMetadata>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub first_id: Option<String>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub has_more: Option<bool>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub last_id: Option<String>,
76    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
77    pub rest: serde_json::Map<String, serde_json::Value>,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82pub struct DeleteFileResponseBody {
83    pub id: String,
84    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
85    pub type_: Option<DeletedFileObjectType>,
86    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
87    pub rest: serde_json::Map<String, serde_json::Value>,
88}
89
90pub type DownloadFileResponseBody = Vec<u8>;
91
92#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
93#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
94pub struct FileScope {
95    pub id: String,
96    #[serde(rename = "type")]
97    pub type_: FileScopeType,
98    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
99    pub rest: serde_json::Map<String, serde_json::Value>,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
103#[serde(untagged)]
104#[non_exhaustive]
105pub enum FileScopeType {
106    Known(KnownFileScopeType),
107    Unknown(String),
108}
109
110#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
111#[non_exhaustive]
112pub enum KnownFileScopeType {
113    #[serde(rename = "session")]
114    Session,
115}