misskey_api/endpoint/drive/
files.rs1use crate::model::{
2 drive::{DriveFile, DriveFolder},
3 id::Id,
4};
5
6use mime::Mime;
7use serde::Serialize;
8use typed_builder::TypedBuilder;
9
10pub mod attached_notes;
11pub mod check_existence;
12pub mod create;
13pub mod delete;
14pub mod find;
15pub mod find_by_hash;
16pub mod show;
17pub mod update;
18pub mod upload_from_url;
19
20#[derive(Serialize, Default, Debug, Clone, TypedBuilder)]
21#[serde(rename_all = "camelCase")]
22#[builder(doc)]
23pub struct Request {
24 #[serde(
25 rename = "type",
26 skip_serializing_if = "Option::is_none",
27 serialize_with = "crate::serde::serialize_string_option"
28 )]
29 #[builder(default, setter(strip_option))]
30 pub type_: Option<Mime>,
31 #[builder(default, setter(strip_option))]
32 pub folder_id: Option<Id<DriveFolder>>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 #[builder(default, setter(strip_option))]
36 pub limit: Option<u8>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 #[builder(default, setter(strip_option))]
39 pub since_id: Option<Id<DriveFile>>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 #[builder(default, setter(strip_option))]
42 pub until_id: Option<Id<DriveFile>>,
43}
44
45impl misskey_core::Request for Request {
46 type Response = Vec<DriveFile>;
47 const ENDPOINT: &'static str = "drive/files";
48}
49
50impl_pagination!(Request, DriveFile);
51
52#[cfg(test)]
53mod tests {
54 use super::Request;
55 use crate::test::{ClientExt, HttpClientExt, TestClient};
56
57 use mime::TEXT_PLAIN;
58
59 #[tokio::test]
60 async fn request() {
61 let client = TestClient::new();
62 client.create_text_file("test.txt", "test").await;
63
64 client.test(Request::default()).await;
65 }
66
67 #[tokio::test]
68 async fn request_with_folder() {
69 let client = TestClient::new();
70 let folder = client
71 .test(crate::endpoint::drive::folders::create::Request {
72 name: None,
73 parent_id: None,
74 })
75 .await;
76
77 client
78 .test(Request {
79 type_: None,
80 folder_id: Some(folder.id),
81 limit: None,
82 since_id: None,
83 until_id: None,
84 })
85 .await;
86 }
87
88 #[tokio::test]
89 async fn request_with_options() {
90 let client = TestClient::new();
91 client.create_text_file("test.txt", "test").await;
92
93 client
94 .test(Request {
95 type_: Some(TEXT_PLAIN),
96 folder_id: None,
97 limit: Some(100),
98 since_id: None,
99 until_id: None,
100 })
101 .await;
102 }
103
104 #[tokio::test]
105 async fn request_paginate() {
106 let client = TestClient::new();
107 let file = client.create_text_file("test.txt", "test").await;
108
109 client
110 .test(Request {
111 type_: None,
112 folder_id: None,
113 limit: None,
114 since_id: Some(file.id.clone()),
115 until_id: Some(file.id.clone()),
116 })
117 .await;
118 }
119}