1use serde::{Deserialize, Serialize};
2
3use super::common::{AnthropicBetaHeaders, DeletedFileObjectType, FileObjectType};
4
5pub type FileRequestHeaders = AnthropicBetaHeaders;
6
7#[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 #[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}