misskey_api/endpoint/charts/
users.rs

1use crate::model::chart::{ChartSpan, UsersChart};
2
3use serde::{Deserialize, Serialize};
4use typed_builder::TypedBuilder;
5
6#[derive(Serialize, Debug, Clone, TypedBuilder)]
7#[serde(rename_all = "camelCase")]
8#[builder(doc)]
9pub struct Request {
10    pub span: ChartSpan,
11    /// 1 .. 500
12    #[serde(skip_serializing_if = "Option::is_none")]
13    #[builder(default, setter(strip_option))]
14    pub limit: Option<u64>,
15    #[builder(default, setter(strip_option))]
16    pub offset: Option<u64>,
17}
18
19#[derive(Deserialize, Debug, Clone)]
20#[serde(rename_all = "camelCase")]
21pub struct Response {
22    pub local: UsersChart,
23    pub remote: UsersChart,
24}
25
26impl misskey_core::Request for Request {
27    type Response = Response;
28    const ENDPOINT: &'static str = "charts/users";
29}
30
31#[cfg(test)]
32mod tests {
33    use super::Request;
34    use crate::test::{ClientExt, TestClient};
35
36    #[tokio::test]
37    async fn request() {
38        use crate::model::chart::ChartSpan;
39
40        let client = TestClient::new();
41        client
42            .test(Request {
43                span: ChartSpan::Day,
44                limit: None,
45                offset: None,
46            })
47            .await;
48        client
49            .test(Request {
50                span: ChartSpan::Hour,
51                limit: None,
52                offset: None,
53            })
54            .await;
55    }
56
57    #[tokio::test]
58    async fn request_with_limit() {
59        use crate::model::chart::ChartSpan;
60
61        let client = TestClient::new();
62        client
63            .test(Request {
64                span: ChartSpan::Day,
65                limit: Some(500),
66                offset: None,
67            })
68            .await;
69    }
70
71    #[tokio::test]
72    async fn request_with_offset() {
73        use crate::model::chart::ChartSpan;
74
75        let client = TestClient::new();
76        client
77            .test(Request {
78                span: ChartSpan::Day,
79                limit: None,
80                offset: Some(5),
81            })
82            .await;
83    }
84}