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