cloudreve_api/api/v4/models/
share.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Clone)]
7pub struct ShareLink {
8 pub id: String,
9 pub name: String,
10 pub visited: i64,
11 #[serde(default)]
12 pub downloaded: i64,
13 #[serde(default)]
14 pub price: i64,
15 pub unlocked: bool,
16 pub source_type: ShareSourceType,
17 pub owner: super::auth::NewUser,
18 pub created_at: String,
19 pub expired: bool,
20 pub url: String,
21 #[serde(default)]
22 pub permission_setting: Option<super::file::PermissionSetting>,
23 #[serde(rename = "is_private")]
24 pub is_private: Option<bool>,
25 pub password: Option<String>,
26 pub source_uri: Option<String>,
27 pub share_view: Option<bool>,
28 pub show_readme: Option<bool>,
29 pub password_protected: Option<bool>,
30 pub expires: Option<String>,
31 pub expired_at: Option<String>,
32 #[serde(default)]
33 pub download_count: u64,
34}
35
36#[derive(Debug, Serialize, Clone, PartialEq)]
38pub enum ShareSourceType {
39 File = 0,
40 Folder = 1,
41}
42
43impl<'de> Deserialize<'de> for ShareSourceType {
44 fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
45 where
46 D: serde::Deserializer<'de>,
47 {
48 use serde::de::Error;
49 use serde_json::Value;
50
51 let value = Value::deserialize(deserializer)?;
52 match value {
53 Value::Number(n) => {
54 if let Some(i) = n.as_i64() {
55 match i {
56 0 => Ok(ShareSourceType::File),
57 1 => Ok(ShareSourceType::Folder),
58 _ => Err(Error::custom(format!("Invalid ShareSourceType value: {}", i))),
59 }
60 } else {
61 Err(Error::custom(format!("Invalid ShareSourceType number: {}", n)))
62 }
63 }
64 Value::String(s) => match s.as_str() {
65 "0" => Ok(ShareSourceType::File),
66 "1" => Ok(ShareSourceType::Folder),
67 _ => Err(Error::custom(format!("Invalid ShareSourceType value: {}", s))),
68 },
69 _ => Err(Error::custom(format!("Invalid ShareSourceType type: {:?}", value))),
70 }
71 }
72}
73
74#[derive(Debug, Serialize)]
76pub struct CreateShareLinkRequest {
77 pub permissions: super::file::PermissionSetting,
78 pub uri: String,
79 pub is_private: Option<bool>,
80 pub share_view: Option<bool>,
81 pub expire: Option<u32>,
82 pub price: Option<i32>,
83 pub password: Option<String>,
84 pub show_readme: Option<bool>,
85}
86
87#[derive(Debug, Serialize)]
89pub struct EditShareLinkRequest {
90 pub permissions: super::file::PermissionSetting,
91 pub uri: String,
92 pub share_view: Option<bool>,
93 pub expire: Option<u32>,
94 pub price: Option<i32>,
95 pub show_readme: Option<bool>,
96}
97
98#[derive(Debug, Serialize)]
100pub struct AbuseReportRequest<'a> {
101 pub reason: &'a str,
102}