misskey_api/endpoint/antennas/
notes.rs

1use crate::model::{antenna::Antenna, id::Id, note::Note};
2
3use serde::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 antenna_id: Id<Antenna>,
11    /// 1 .. 100
12    #[serde(skip_serializing_if = "Option::is_none")]
13    #[builder(default, setter(strip_option))]
14    pub limit: Option<u8>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    #[builder(default, setter(strip_option))]
17    pub since_id: Option<Id<Note>>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    #[builder(default, setter(strip_option))]
20    pub until_id: Option<Id<Note>>,
21}
22
23impl misskey_core::Request for Request {
24    type Response = Vec<Note>;
25    const ENDPOINT: &'static str = "antennas/notes";
26}
27
28impl_pagination!(Request, Note);
29
30#[cfg(test)]
31mod tests {
32    use super::Request;
33    use crate::test::{ClientExt, TestClient};
34
35    #[tokio::test]
36    async fn request() {
37        use crate::model::{antenna::AntennaSource, query::Query};
38
39        let client = TestClient::new();
40        let antenna = client
41            .user
42            .test(crate::endpoint::antennas::create::Request {
43                name: "test".to_string(),
44                src: AntennaSource::All,
45                user_list_id: None,
46                #[cfg(feature = "12-10-0")]
47                user_group_id: None,
48                keywords: Query::default(),
49                #[cfg(feature = "12-19-0")]
50                exclude_keywords: Query::default(),
51                users: Vec::new(),
52                case_sensitive: false,
53                with_replies: false,
54                with_file: false,
55                notify: false,
56            })
57            .await;
58
59        client
60            .user
61            .test(Request {
62                antenna_id: antenna.id,
63                limit: None,
64                since_id: None,
65                until_id: None,
66            })
67            .await;
68    }
69
70    #[tokio::test]
71    async fn request_with_limit() {
72        use crate::model::{antenna::AntennaSource, query::Query};
73
74        let client = TestClient::new();
75        let antenna = client
76            .user
77            .test(crate::endpoint::antennas::create::Request {
78                name: "test".to_string(),
79                src: AntennaSource::All,
80                user_list_id: None,
81                #[cfg(feature = "12-10-0")]
82                user_group_id: None,
83                keywords: Query::from_vec(vec![vec!["hello".to_string(), "awesome".to_string()]]),
84                #[cfg(feature = "12-19-0")]
85                exclude_keywords: Query::default(),
86                users: Vec::new(),
87                case_sensitive: false,
88                with_replies: false,
89                with_file: false,
90                notify: false,
91            })
92            .await;
93
94        client
95            .user
96            .test(Request {
97                antenna_id: antenna.id,
98                limit: Some(100),
99                since_id: None,
100                until_id: None,
101            })
102            .await;
103    }
104
105    #[tokio::test]
106    async fn request_paginate() {
107        use crate::model::{antenna::AntennaSource, query::Query};
108
109        let client = TestClient::new();
110        let antenna = client
111            .user
112            .test(crate::endpoint::antennas::create::Request {
113                name: "test".to_string(),
114                src: AntennaSource::All,
115                user_list_id: None,
116                #[cfg(feature = "12-10-0")]
117                user_group_id: None,
118                keywords: Query::from_vec(vec![vec!["hello".to_string(), "awesome".to_string()]]),
119                #[cfg(feature = "12-19-0")]
120                exclude_keywords: Query::default(),
121                users: Vec::new(),
122                case_sensitive: false,
123                with_replies: false,
124                with_file: false,
125                notify: false,
126            })
127            .await;
128        let note = client
129            .admin
130            .create_note(Some("hello, world"), None, None)
131            .await;
132
133        client
134            .user
135            .test(Request {
136                antenna_id: antenna.id,
137                limit: None,
138                since_id: Some(note.id.clone()),
139                until_id: Some(note.id.clone()),
140            })
141            .await;
142    }
143}