misskey_api/streaming/channel/
admin.rs

1use crate::model::{abuse_user_report::AbuseUserReport, id::Id, user::User};
2use crate::streaming::channel::NoOutgoing;
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Deserialize, Debug, Clone)]
7#[serde(rename_all = "camelCase", tag = "type", content = "body")]
8pub enum AdminStreamEvent {
9    #[serde(rename_all = "camelCase")]
10    NewAbuseUserReport {
11        id: Id<AbuseUserReport>,
12        #[cfg(any(docsrs, not(feature = "12-49-0")))]
13        #[cfg_attr(docsrs, doc(cfg(not(feature = "12-49-0"))))]
14        user_id: Id<User>,
15        #[cfg(feature = "12-49-0")]
16        #[cfg_attr(docsrs, doc(cfg(feature = "12-49-0")))]
17        target_user_id: Id<User>,
18        reporter_id: Id<User>,
19        comment: String,
20    },
21}
22
23#[derive(Serialize, Default, Debug, Clone)]
24pub struct Request {}
25
26impl misskey_core::streaming::ConnectChannelRequest for Request {
27    type Incoming = AdminStreamEvent;
28    type Outgoing = NoOutgoing;
29
30    const NAME: &'static str = "admin";
31}
32
33#[cfg(test)]
34mod tests {
35    use super::{AdminStreamEvent, Request};
36    use crate::test::{websocket::TestClient, ClientExt};
37
38    use futures::{future, StreamExt};
39
40    #[tokio::test]
41    async fn subscribe_unsubscribe() {
42        let client = TestClient::new().await;
43        let mut stream = client.admin.channel(Request::default()).await.unwrap();
44        stream.disconnect().await.unwrap();
45    }
46
47    #[tokio::test]
48    async fn stream() {
49        let client = TestClient::new().await;
50        let (user, _) = client.admin.create_user().await;
51        let mut stream = client.admin.channel(Request::default()).await.unwrap();
52
53        future::join(
54            client.test(crate::endpoint::users::report_abuse::Request {
55                user_id: user.id,
56                comment: "looks bad".to_string(),
57            }),
58            async {
59                loop {
60                    match stream.next().await.unwrap().unwrap() {
61                        AdminStreamEvent::NewAbuseUserReport { .. } => break,
62                    }
63                }
64            },
65        )
66        .await;
67    }
68}