misskey_api/streaming/channel/
antenna.rs1use crate::model::{antenna::Antenna, id::Id, note::Note};
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 AntennaStreamEvent {
9 Note(Note),
10}
11
12#[derive(Serialize, Debug, Clone)]
13#[serde(rename_all = "camelCase")]
14pub struct Request {
15 pub antenna_id: Id<Antenna>,
16}
17
18impl misskey_core::streaming::ConnectChannelRequest for Request {
19 type Incoming = AntennaStreamEvent;
20 type Outgoing = NoOutgoing;
21
22 const NAME: &'static str = "antenna";
23}
24
25#[cfg(test)]
26mod tests {
27 use super::Request;
28 use crate::test::{websocket::TestClient, ClientExt};
29
30 use futures::{future, StreamExt};
31
32 #[tokio::test]
33 async fn subscribe_unsubscribe() {
34 use crate::model::{antenna::AntennaSource, query::Query};
35
36 let client = TestClient::new().await;
37 let antenna = client
38 .test(crate::endpoint::antennas::create::Request {
39 name: "test".to_string(),
40 src: AntennaSource::All,
41 user_list_id: None,
42 #[cfg(feature = "12-10-0")]
43 user_group_id: None,
44 keywords: Query::from_vec(vec![vec!["hello".to_string(), "awesome".to_string()]]),
45 #[cfg(feature = "12-19-0")]
46 exclude_keywords: Query::default(),
47 users: Vec::new(),
48 case_sensitive: false,
49 with_replies: false,
50 with_file: false,
51 notify: false,
52 })
53 .await;
54
55 let mut stream = client
56 .channel(Request {
57 antenna_id: antenna.id,
58 })
59 .await
60 .unwrap();
61 stream.disconnect().await.unwrap();
62 }
63
64 #[tokio::test]
65 async fn stream() {
66 use crate::model::{antenna::AntennaSource, query::Query};
67
68 let client = TestClient::new().await;
69 let antenna = client
70 .test(crate::endpoint::antennas::create::Request {
71 name: "test".to_string(),
72 src: AntennaSource::All,
73 user_list_id: None,
74 #[cfg(feature = "12-10-0")]
75 user_group_id: None,
76 keywords: Query::from_vec(vec![vec!["hello".to_string()]]),
77 #[cfg(feature = "12-19-0")]
78 exclude_keywords: Query::default(),
79 users: Vec::new(),
80 case_sensitive: false,
81 with_replies: false,
82 with_file: false,
83 notify: false,
84 })
85 .await;
86
87 let mut stream = client
88 .channel(Request {
89 antenna_id: antenna.id,
90 })
91 .await
92 .unwrap();
93
94 future::join(client.create_note(Some("hello"), None, None), async {
95 stream.next().await.unwrap().unwrap()
96 })
97 .await;
98 }
99}