misskey_api/endpoint/users/
search_by_username_and_host.rs

1use crate::model::user::User;
2
3use serde::Serialize;
4use typed_builder::TypedBuilder;
5
6#[derive(Serialize, Debug, Clone, TypedBuilder)]
7#[serde(rename_all = "camelCase")]
8#[builder(doc)]
9pub struct Request {
10    #[builder(default, setter(strip_option, into))]
11    pub username: Option<String>,
12    #[builder(default, setter(strip_option, into))]
13    pub host: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    #[builder(default, setter(strip_option))]
16    pub detail: Option<bool>,
17    /// 1 .. 100
18    #[serde(skip_serializing_if = "Option::is_none")]
19    #[builder(default, setter(strip_option))]
20    pub limit: Option<u8>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    #[builder(default, setter(strip_option))]
23    pub offset: Option<u64>,
24}
25
26impl misskey_core::Request for Request {
27    type Response = Vec<User>;
28    const ENDPOINT: &'static str = "users/search-by-username-and-host";
29}
30
31impl_offset_pagination!(Request, User);
32
33#[cfg(test)]
34mod tests {
35    use super::Request;
36    use crate::test::{ClientExt, TestClient};
37
38    #[tokio::test]
39    async fn request() {
40        let client = TestClient::new();
41        client
42            .test(Request {
43                username: Some("test".to_string()),
44                host: None,
45                detail: None,
46                limit: None,
47                offset: None,
48            })
49            .await;
50    }
51
52    #[tokio::test]
53    async fn request_with_host() {
54        let client = TestClient::new();
55        client
56            .test(Request {
57                username: Some("test".to_string()),
58                host: Some("dummy".to_string()), // TODO: use proper host string
59                detail: None,
60                limit: None,
61                offset: None,
62            })
63            .await;
64    }
65
66    #[tokio::test]
67    async fn request_with_options() {
68        let client = TestClient::new();
69        client
70            .test(Request {
71                username: Some("admin".to_string()),
72                host: None,
73                detail: Some(false),
74                limit: None,
75                offset: None,
76            })
77            .await;
78    }
79
80    #[tokio::test]
81    async fn request_with_limit() {
82        let client = TestClient::new();
83        client
84            .test(Request {
85                username: Some("admin".to_string()),
86                host: None,
87                detail: None,
88                limit: Some(100),
89                offset: None,
90            })
91            .await;
92    }
93
94    #[tokio::test]
95    async fn request_with_offset() {
96        let client = TestClient::new();
97        client
98            .test(Request {
99                username: Some("admin".to_string()),
100                host: None,
101                detail: None,
102                limit: None,
103                offset: Some(5),
104            })
105            .await;
106    }
107}