misskey_api/endpoint/drive/
stream.rs

1use crate::model::{drive::DriveFile, id::Id};
2
3use mime::Mime;
4use serde::Serialize;
5use typed_builder::TypedBuilder;
6
7#[derive(Serialize, Default, Debug, Clone, TypedBuilder)]
8#[serde(rename_all = "camelCase")]
9#[builder(doc)]
10pub struct Request {
11    #[serde(
12        rename = "type",
13        skip_serializing_if = "Option::is_none",
14        serialize_with = "crate::serde::serialize_string_option"
15    )]
16    #[builder(default, setter(strip_option))]
17    pub type_: Option<Mime>,
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<DriveFile>>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    #[builder(default, setter(strip_option))]
27    pub until_id: Option<Id<DriveFile>>,
28}
29
30impl misskey_core::Request for Request {
31    type Response = Vec<DriveFile>;
32    const ENDPOINT: &'static str = "drive/stream";
33}
34
35impl_pagination!(Request, DriveFile);
36
37#[cfg(test)]
38mod tests {
39    use super::Request;
40    use crate::test::{ClientExt, HttpClientExt, TestClient};
41
42    use mime::TEXT_PLAIN;
43
44    #[tokio::test]
45    async fn request() {
46        let client = TestClient::new();
47        client.create_text_file("test.txt", "test").await;
48
49        client.test(Request::default()).await;
50    }
51
52    #[tokio::test]
53    async fn request_with_options() {
54        let client = TestClient::new();
55        client.create_text_file("test.txt", "test").await;
56
57        client
58            .test(Request {
59                type_: Some(TEXT_PLAIN),
60                limit: Some(100),
61                since_id: None,
62                until_id: None,
63            })
64            .await;
65    }
66
67    #[tokio::test]
68    async fn request_paginate() {
69        let client = TestClient::new();
70        let file = client.create_text_file("test.txt", "test").await;
71
72        client
73            .test(Request {
74                type_: None,
75                limit: None,
76                since_id: Some(file.id.clone()),
77                until_id: Some(file.id.clone()),
78            })
79            .await;
80    }
81}