1use serde::{Deserialize, Serialize};
2
3use super::FileState;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
6#[serde(rename_all = "camelCase")]
7#[derive(gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct UploadFileRequest {
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub file: Option<UploadFileMetadata>,
12 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
13 pub rest: serde_json::Map<String, serde_json::Value>,
14}
15
16pub type CreateFileRequest = UploadFileRequest;
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
19#[serde(rename_all = "camelCase")]
20#[derive(gproxy_protocol_macros::WireBuilder)]
21#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
22pub struct UploadFileMetadata {
23 #[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
24 pub display_name: Option<String>,
25 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
26 pub rest: serde_json::Map<String, serde_json::Value>,
27}
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
30#[serde(rename_all = "camelCase")]
31#[derive(gproxy_protocol_macros::WireBuilder)]
32#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
33pub struct ListFilesRequest {
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub page_size: Option<u32>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub page_token: Option<String>,
38 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
39 pub rest: serde_json::Map<String, serde_json::Value>,
40}
41
42#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
43#[serde(rename_all = "camelCase")]
44#[derive(gproxy_protocol_macros::WireBuilder)]
45#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
46pub struct FileRequest {
47 pub name: String,
48 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
49 pub rest: serde_json::Map<String, serde_json::Value>,
50}
51
52pub type RetrieveFileRequest = FileRequest;
53pub type DeleteFileRequest = FileRequest;
54pub type DownloadFileRequest = FileRequest;
55pub type RetrieveFileResponse = File;
56pub type DownloadFileResponse = Vec<u8>;
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
59#[serde(rename_all = "camelCase")]
60#[derive(gproxy_protocol_macros::WireBuilder)]
61#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
62pub struct UploadFileResponse {
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub file: Option<File>,
65 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
66 pub rest: serde_json::Map<String, serde_json::Value>,
67}
68
69pub type CreateFileResponse = UploadFileResponse;
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
72#[serde(rename_all = "camelCase")]
73#[derive(gproxy_protocol_macros::WireBuilder)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct ListFilesResponse {
76 #[serde(default, skip_serializing_if = "Vec::is_empty")]
77 pub files: Vec<File>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub next_page_token: Option<String>,
80 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
81 pub rest: serde_json::Map<String, serde_json::Value>,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
85#[serde(rename_all = "camelCase")]
86#[derive(gproxy_protocol_macros::WireBuilder)]
87#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
88pub struct DeleteFileResponse {
89 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
90 pub rest: serde_json::Map<String, serde_json::Value>,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
94#[serde(rename_all = "camelCase")]
95#[derive(gproxy_protocol_macros::WireBuilder)]
96#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
97pub struct File {
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub name: Option<String>,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub mime_type: Option<String>,
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub uri: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub state: Option<FileState>,
106 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
107 pub rest: serde_json::Map<String, serde_json::Value>,
108}