misskey_api/endpoint/admin/
show_moderation_logs.rs1use crate::model::{id::Id, log::ModerationLog};
2
3use serde::Serialize;
4use typed_builder::TypedBuilder;
5
6#[derive(Serialize, Default, Debug, Clone, TypedBuilder)]
7#[serde(rename_all = "camelCase")]
8#[builder(doc)]
9pub struct Request {
10 #[serde(skip_serializing_if = "Option::is_none")]
12 #[builder(default, setter(strip_option))]
13 pub limit: Option<u8>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 #[builder(default, setter(strip_option))]
16 pub since_id: Option<Id<ModerationLog>>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 #[builder(default, setter(strip_option))]
19 pub until_id: Option<Id<ModerationLog>>,
20}
21
22impl misskey_core::Request for Request {
23 type Response = Vec<ModerationLog>;
24 const ENDPOINT: &'static str = "admin/show-moderation-logs";
25}
26
27impl_pagination!(Request, ModerationLog);
28
29#[cfg(test)]
30mod tests {
31 use super::Request;
32 use crate::test::{ClientExt, TestClient};
33
34 #[tokio::test]
35 async fn request() {
36 let client = TestClient::new();
37 client.admin.test(Request::default()).await;
38 }
39
40 #[tokio::test]
41 async fn request_with_options() {
42 let client = TestClient::new();
43 client
44 .admin
45 .test(Request {
46 limit: Some(100),
47 since_id: None,
48 until_id: None,
49 })
50 .await;
51 }
52
53 #[tokio::test]
54 async fn request_paginate() {
55 let client = TestClient::new();
56 let image_url = client.avatar_url().await;
57 client.admin.add_emoji_from_url(image_url).await;
59
60 let logs = client
61 .admin
62 .test(Request {
63 limit: None,
64 since_id: None,
65 until_id: None,
66 })
67 .await;
68
69 client
70 .admin
71 .test(Request {
72 limit: None,
73 since_id: Some(logs[0].id.clone()),
74 until_id: Some(logs[0].id.clone()),
75 })
76 .await;
77 }
78}