misskey_api/endpoint/drive/
stream.rs1use 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 #[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}