misskey_api/endpoint/antennas/
create.rs1#[cfg(feature = "12-10-0")]
2use crate::model::user_group::UserGroup;
3use crate::model::{
4 antenna::{Antenna, AntennaSource},
5 id::Id,
6 query::Query,
7 user_list::UserList,
8};
9
10use serde::Serialize;
11use typed_builder::TypedBuilder;
12
13#[derive(Serialize, Debug, Clone, TypedBuilder)]
14#[serde(rename_all = "camelCase")]
15#[builder(doc)]
16pub struct Request {
17 #[builder(setter(into))]
19 pub name: String,
20 pub src: AntennaSource,
21 #[builder(default, setter(strip_option))]
22 pub user_list_id: Option<Id<UserList>>,
23 #[cfg(feature = "12-10-0")]
24 #[cfg_attr(docsrs, doc(cfg(feature = "12-10-0")))]
25 #[builder(default, setter(strip_option))]
26 pub user_group_id: Option<Id<UserGroup>>,
27 #[builder(default, setter(into))]
28 pub keywords: Query<String>,
29 #[cfg(feature = "12-19-0")]
30 #[cfg_attr(docsrs, doc(cfg(feature = "12-19-0")))]
31 #[builder(default, setter(into))]
32 pub exclude_keywords: Query<String>,
33 pub users: Vec<String>,
34 pub case_sensitive: bool,
35 pub with_replies: bool,
36 pub with_file: bool,
37 pub notify: bool,
38}
39
40impl misskey_core::Request for Request {
41 type Response = Antenna;
42 const ENDPOINT: &'static str = "antennas/create";
43}
44
45#[cfg(test)]
46mod tests {
47 use super::Request;
48 use crate::test::{ClientExt, TestClient};
49
50 #[tokio::test]
51 async fn request_all() {
52 use crate::model::{antenna::AntennaSource, query::Query};
53
54 let client = TestClient::new();
55 client
56 .test(Request {
57 name: "z0LnEV7NljIUEFFBkjTMW7BN2f6GhfnkbjrNWTqsPikqBzbd02jAvN1axE9h9ZyYCIklKt4WIeeyCNxB31TxJW6hJyHAJVnjTPJC".to_string(),
59 src: AntennaSource::All,
60 user_list_id: None,
61 #[cfg(feature = "12-10-0")]
62 user_group_id: None,
63 keywords: Query::from_vec(vec![vec!["hello".to_string(), "awesome".to_string()]]),
64 #[cfg(feature = "12-19-0")]
65 exclude_keywords: Query::from_vec(vec![vec!["no".to_string()]]),
66 users: Vec::new(),
67 case_sensitive: false,
68 with_replies: false,
69 with_file: false,
70 notify: false,
71 })
72 .await;
73 }
74
75 #[tokio::test]
76 async fn request_home() {
77 use crate::model::{antenna::AntennaSource, query::Query};
78
79 let client = TestClient::new();
80 client
81 .test(Request {
82 name: "test".to_string(),
83 src: AntennaSource::Home,
84 user_list_id: None,
85 #[cfg(feature = "12-10-0")]
86 user_group_id: None,
87 keywords: Query::from_vec(vec![vec!["hey".to_string()], vec!["wow".to_string()]]),
88 #[cfg(feature = "12-19-0")]
89 exclude_keywords: Query::default(),
90 users: Vec::new(),
91 case_sensitive: true,
92 with_replies: false,
93 with_file: false,
94 notify: false,
95 })
96 .await;
97 }
98
99 #[tokio::test]
100 async fn request_list() {
101 use crate::model::{antenna::AntennaSource, query::Query};
102
103 let client = TestClient::new();
104 let list = client
105 .test(crate::endpoint::users::lists::create::Request {
106 name: "test".to_string(),
107 })
108 .await;
109
110 client
111 .test(Request {
112 name: "test".to_string(),
113 src: AntennaSource::List,
114 user_list_id: Some(list.id),
115 #[cfg(feature = "12-10-0")]
116 user_group_id: None,
117 keywords: Query::from_vec(vec![
118 vec!["kawaii".to_string()],
119 vec!["cute".to_string()],
120 ]),
121 #[cfg(feature = "12-19-0")]
122 exclude_keywords: Query::from_vec(vec![
123 vec!["sensitive".to_string()],
124 vec!["violence".to_string()],
125 ]),
126 users: Vec::new(),
127 case_sensitive: false,
128 with_replies: true,
129 with_file: true,
130 notify: false,
131 })
132 .await;
133 }
134
135 #[tokio::test]
136 #[cfg(feature = "12-10-0")]
137 async fn request_group() {
138 use crate::model::{antenna::AntennaSource, query::Query};
139
140 let client = TestClient::new();
141 let group = client
142 .test(crate::endpoint::users::groups::create::Request {
143 name: "test".to_string(),
144 })
145 .await;
146
147 client
148 .test(Request {
149 name: "test".to_string(),
150 src: AntennaSource::Group,
151 user_list_id: None,
152 user_group_id: Some(group.id),
153 keywords: Query::from_vec(vec![
154 vec!["kawaii".to_string()],
155 vec!["cute".to_string()],
156 ]),
157 #[cfg(feature = "12-19-0")]
158 exclude_keywords: Query::default(),
159 users: Vec::new(),
160 case_sensitive: false,
161 with_replies: true,
162 with_file: true,
163 notify: false,
164 })
165 .await;
166 }
167
168 #[tokio::test]
169 async fn request_users() {
170 use crate::model::{antenna::AntennaSource, query::Query};
171
172 let client = TestClient::new();
173 let admin = client.admin.me().await;
174
175 client
176 .user
177 .test(Request {
178 name: "test".to_string(),
179 src: AntennaSource::Users,
180 user_list_id: None,
181 #[cfg(feature = "12-10-0")]
182 user_group_id: None,
183 keywords: Query::from_vec(vec![
184 vec!["annoucement".to_string()],
185 vec!["notice".to_string()],
186 ]),
187 #[cfg(feature = "12-19-0")]
188 exclude_keywords: Query::default(),
189 users: vec![admin.username],
190 case_sensitive: false,
191 with_replies: true,
192 with_file: false,
193 notify: true,
194 })
195 .await;
196 }
197}