1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Serialize, Deserialize)]
8pub struct ApiResponse<T> {
9 pub code: i32,
10 pub msg: String,
11 pub data: Option<T>,
12}
13
14#[derive(Debug, Serialize, Deserialize, Clone)]
16pub struct User {
17 pub id: String,
18 pub user_name: String,
19 pub nickname: String,
20 #[serde(default)]
21 pub status: i32,
22 #[serde(default)]
23 pub avatar: String,
24 pub created_at: String,
25 #[serde(default)]
26 pub preferred_theme: String,
27 #[serde(default)]
28 pub anonymous: bool,
29 pub group: UserGroup,
30 #[serde(default)]
31 pub tags: Vec<String>,
32}
33
34#[derive(Debug, Serialize, Deserialize, Clone)]
36pub struct UserGroup {
37 #[serde(default)]
38 pub id: i32,
39 #[serde(default)]
40 pub name: String,
41 #[serde(default)]
42 pub allow_share: bool,
43 #[serde(default)]
44 pub allow_remote_download: bool,
45 #[serde(default)]
46 pub allow_archive_download: bool,
47 #[serde(default)]
48 pub share_download: bool,
49 #[serde(default)]
50 pub compress: bool,
51 #[serde(default)]
52 pub webdav: bool,
53 #[serde(default)]
54 pub source_batch: i32,
55 #[serde(default)]
56 pub advance_delete: bool,
57 #[serde(default)]
58 pub allow_web_dav_proxy: bool,
59}
60
61#[derive(Debug, Serialize, Deserialize, Clone)]
63pub struct Object {
64 pub id: String,
65 pub name: String,
66 pub path: String,
67 pub thumb: bool,
68 pub size: i64,
69 #[serde(rename = "type")]
70 pub object_type: String,
71 pub date: String,
72 pub create_date: String,
73 pub source_enabled: bool,
74}
75
76#[derive(Debug, Serialize, Deserialize, Clone, Default)]
78pub struct Policy {
79 #[serde(default)]
80 pub id: String,
81 #[serde(default)]
82 pub name: String,
83 #[serde(rename = "type")]
84 #[serde(default)]
85 pub policy_type: String,
86 #[serde(default)]
87 pub max_size: i64,
88 #[serde(default)]
89 pub file_type: Option<Vec<String>>,
90}
91
92#[derive(Debug, Serialize, Deserialize)]
94pub struct Property {
95 pub created_at: String,
96 pub updated_at: String,
97 pub policy: String,
98 pub size: i64,
99 pub child_folder_num: i32,
100 pub child_file_num: i32,
101 pub path: String,
102 pub query_date: String,
103}
104
105#[derive(Debug, Serialize, Deserialize)]
107pub struct DirectoryList {
108 #[serde(default)]
109 pub parent: String,
110 #[serde(default)]
111 pub objects: Vec<Object>,
112 #[serde(default)]
113 pub policy: Policy,
114}
115
116#[derive(Debug, Serialize, Deserialize)]
118pub struct UploadSession {
119 #[serde(rename = "sessionID")]
120 pub session_id: String,
121 #[serde(rename = "chunkSize")]
122 pub chunk_size: i64,
123 pub expires: i64,
124}
125
126#[derive(Debug, Serialize)]
128pub struct UploadFileRequest<'a> {
129 pub path: &'a str,
130 pub size: i64,
131 pub name: &'a str,
132 pub policy_id: &'a str,
133 pub last_modified: i64,
134 pub mime_type: &'a str,
135}
136
137#[derive(Debug, Deserialize)]
139pub struct DownloadUrl {
140 pub url: String,
141}
142
143#[derive(Debug, Deserialize)]
145pub struct FileSource {
146 pub url: String,
147 pub name: String,
148 pub parent: i64,
149}
150
151#[derive(Debug, Serialize, Deserialize)]
153pub struct StorageInfo {
154 pub used: i64,
155 pub free: i64,
156 pub total: i64,
157}
158
159#[derive(Debug, Deserialize, Default)]
161pub struct Share {
162 #[serde(default)]
163 pub key: String,
164 #[serde(default)]
165 pub password: String,
166 #[serde(default)]
167 pub is_dir: bool,
168 #[serde(default)]
169 pub downloads: i64,
170 #[serde(default)]
171 pub remain_downloads: i64,
172 #[serde(default)]
173 pub expire: i64,
174 #[serde(default)]
175 pub preview: bool,
176 #[serde(default)]
177 pub owner_id: String,
178 #[serde(default)]
179 pub owner_nick: String,
180 #[serde(default)]
181 pub created_at: String,
182}
183
184#[derive(Debug, Serialize)]
186pub struct ShareRequest {
187 pub id: String,
188 pub is_dir: bool,
189 pub password: String,
190 pub downloads: i32,
191 pub expire: i32,
192 pub preview: bool,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize, Default)]
197pub struct SiteConfig {
198 #[serde(default)]
199 pub title: String,
200 #[serde(default)]
201 pub login_captcha: bool,
202 #[serde(default)]
203 pub reg_captcha: bool,
204 #[serde(default)]
205 pub forget_captcha: bool,
206 #[serde(default)]
207 pub email_active: bool,
208 #[serde(default)]
209 pub themes: String,
210 #[serde(default)]
211 pub default_theme: String,
212 #[serde(default)]
213 pub home_view_method: String,
214 #[serde(default)]
215 pub share_view_method: String,
216 #[serde(default)]
217 pub authn: bool,
218 #[serde(default)]
219 pub user: Option<User>,
220 #[serde(default)]
221 pub captcha_recaptcha_key: String,
222 #[serde(default)]
223 pub captcha_type: String,
224 #[serde(default)]
225 pub tcaptcha_captcha_app_id: String,
226 #[serde(default)]
227 pub register_enabled: bool,
228 #[serde(default)]
229 pub app_promotion: bool,
230 #[serde(default)]
231 pub wopi_exts: Option<Value>,
232 #[serde(default)]
233 pub direct_link_batch_size: i64,
234}
235
236#[derive(Debug, Serialize)]
238pub struct LoginRequest<'a> {
239 #[serde(rename = "userName")]
240 pub user_name: &'a str,
241 #[serde(rename = "Password")]
242 pub password: &'a str,
243 #[serde(rename = "captchaCode")]
244 pub captcha_code: Option<&'a str>,
245}
246
247#[derive(Debug, Deserialize)]
249pub struct CaptchaResponse {
250 pub image: String,
251 pub ticket: String,
252}
253
254#[derive(Debug, Serialize)]
256pub struct OtpLoginRequest {
257 pub code: String,
258}
259
260#[derive(Debug, Serialize)]
262pub struct CreateDirectoryRequest<'a> {
263 pub path: &'a str,
264}
265
266#[derive(Debug, Serialize)]
268pub struct CreateFileRequest<'a> {
269 pub path: &'a str,
270}
271
272#[derive(Debug, Serialize)]
274pub struct FileSourceRequest {
275 pub items: Vec<String>,
276}
277
278#[derive(Debug, Serialize)]
280pub struct RenameObjectRequest<'a> {
281 pub action: &'a str,
282 pub src: SourceItems<'a>,
283 pub new_name: &'a str,
284}
285
286#[derive(Debug, Serialize)]
288pub struct SourceItems<'a> {
289 pub dirs: Vec<&'a str>,
290 pub items: Vec<&'a str>,
291}
292
293#[derive(Debug, Serialize)]
295pub struct MoveObjectRequest<'a> {
296 pub action: &'a str,
297 pub src_dir: &'a str,
298 pub src: SourceItems<'a>,
299 pub dst: &'a str,
300}
301
302#[derive(Debug, Serialize)]
304pub struct CopyObjectRequest<'a> {
305 pub src_dir: &'a str,
306 pub src: SourceItems<'a>,
307 pub dst: &'a str,
308}
309
310#[derive(Debug, Serialize)]
312pub struct DeleteObjectRequest<'a> {
313 pub items: Vec<&'a str>,
314 pub dirs: Vec<&'a str>,
315 pub force: bool,
316 pub unlink: bool,
317}
318
319pub struct ObjectPropertyRequest<'a> {
321 pub id: &'a str,
322 pub is_folder: Option<bool>,
323 pub trace_root: Option<bool>,
324}
325
326#[derive(Debug, Deserialize)]
328pub struct Aria2Task {
329 pub id: String,
330 pub url: String,
331 pub status: String,
332 pub progress: f64,
333 pub created_at: String,
334}
335
336#[derive(Debug, Serialize)]
338pub struct Aria2CreateRequest<'a> {
339 pub dst: &'a str,
340 pub url: Vec<&'a str>,
341}
342
343#[derive(Debug, Deserialize)]
345pub struct WebdavAccount {
346 #[serde(rename = "ID")]
347 pub id: i32,
348 #[serde(rename = "Name")]
349 pub name: String,
350 #[serde(rename = "Root")]
351 pub uri: String,
352 #[serde(rename = "Password")]
353 pub password: String,
354 #[serde(rename = "CreatedAt")]
355 pub created_at: String,
356}