misskey_api/streaming/channel/
admin.rs1use 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}