misskey_api/endpoint/drive/
folders.rs

1use 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    /// 1 .. 100
19    #[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}