1pub use crate::mod_types::channels_types::*;
18use crate::sync::requests::SlackWebRequestSender;
19
20pub fn archive<R>(
25 client: &R,
26 token: &str,
27 request: &ArchiveRequest<'_>,
28) -> Result<ArchiveResponse, ArchiveError<R::Error>>
29where
30 R: SlackWebRequestSender,
31{
32 let params = vec![Some(("token", token)), Some(("channel", request.channel))];
33 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
34 let url = crate::get_slack_url_for_method("channels.archive");
35 client
36 .send(&url, ¶ms[..])
37 .map_err(ArchiveError::Client)
38 .and_then(|result| {
39 serde_json::from_str::<ArchiveResponse>(&result)
40 .map_err(|e| ArchiveError::MalformedResponse(result, e))
41 })
42 .and_then(|o| o.into())
43}
44
45pub fn create<R>(
50 client: &R,
51 token: &str,
52 request: &CreateRequest<'_>,
53) -> Result<CreateResponse, CreateError<R::Error>>
54where
55 R: SlackWebRequestSender,
56{
57 let params = vec![
58 Some(("token", token)),
59 Some(("name", request.name)),
60 request
61 .validate
62 .map(|validate| ("validate", if validate { "1" } else { "0" })),
63 ];
64 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
65 let url = crate::get_slack_url_for_method("channels.create");
66 client
67 .send(&url, ¶ms[..])
68 .map_err(CreateError::Client)
69 .and_then(|result| {
70 serde_json::from_str::<CreateResponse>(&result)
71 .map_err(|e| CreateError::MalformedResponse(result, e))
72 })
73 .and_then(|o| o.into())
74}
75
76pub fn history<R>(
81 client: &R,
82 token: &str,
83 request: &HistoryRequest<'_>,
84) -> Result<HistoryResponse, HistoryError<R::Error>>
85where
86 R: SlackWebRequestSender,
87{
88 let latest = request.latest.as_ref().map(|t| t.to_param_value());
89 let oldest = request.oldest.as_ref().map(|t| t.to_param_value());
90 let count = request.count.map(|count| count.to_string());
91 let params = vec![
92 Some(("token", token)),
93 Some(("channel", request.channel)),
94 latest.as_ref().map(|latest| ("latest", &latest[..])),
95 oldest.as_ref().map(|oldest| ("oldest", &oldest[..])),
96 request
97 .inclusive
98 .map(|inclusive| ("inclusive", if inclusive { "1" } else { "0" })),
99 count.as_ref().map(|count| ("count", &count[..])),
100 request
101 .unreads
102 .map(|unreads| ("unreads", if unreads { "1" } else { "0" })),
103 ];
104 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
105 let url = crate::get_slack_url_for_method("channels.history");
106 client
107 .send(&url, ¶ms[..])
108 .map_err(HistoryError::Client)
109 .and_then(|result| {
110 serde_json::from_str::<HistoryResponse>(&result)
111 .map_err(|e| HistoryError::MalformedResponse(result, e))
112 })
113 .and_then(|o| o.into())
114}
115
116pub fn info<R>(
121 client: &R,
122 token: &str,
123 request: &InfoRequest<'_>,
124) -> Result<InfoResponse, InfoError<R::Error>>
125where
126 R: SlackWebRequestSender,
127{
128 let params = vec![Some(("token", token)), Some(("channel", request.channel))];
129 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
130 let url = crate::get_slack_url_for_method("channels.info");
131 client
132 .send(&url, ¶ms[..])
133 .map_err(InfoError::Client)
134 .and_then(|result| {
135 serde_json::from_str::<InfoResponse>(&result)
136 .map_err(|e| InfoError::MalformedResponse(result, e))
137 })
138 .and_then(|o| o.into())
139}
140
141pub fn invite<R>(
146 client: &R,
147 token: &str,
148 request: &InviteRequest<'_>,
149) -> Result<InviteResponse, InviteError<R::Error>>
150where
151 R: SlackWebRequestSender,
152{
153 let params = vec![
154 Some(("token", token)),
155 Some(("channel", request.channel)),
156 Some(("user", request.user)),
157 ];
158 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
159 let url = crate::get_slack_url_for_method("channels.invite");
160 client
161 .send(&url, ¶ms[..])
162 .map_err(InviteError::Client)
163 .and_then(|result| {
164 serde_json::from_str::<InviteResponse>(&result)
165 .map_err(|e| InviteError::MalformedResponse(result, e))
166 })
167 .and_then(|o| o.into())
168}
169
170pub fn join<R>(
175 client: &R,
176 token: &str,
177 request: &JoinRequest<'_>,
178) -> Result<JoinResponse, JoinError<R::Error>>
179where
180 R: SlackWebRequestSender,
181{
182 let params = vec![
183 Some(("token", token)),
184 Some(("name", request.name)),
185 request
186 .validate
187 .map(|validate| ("validate", if validate { "1" } else { "0" })),
188 ];
189 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
190 let url = crate::get_slack_url_for_method("channels.join");
191 client
192 .send(&url, ¶ms[..])
193 .map_err(JoinError::Client)
194 .and_then(|result| {
195 serde_json::from_str::<JoinResponse>(&result)
196 .map_err(|e| JoinError::MalformedResponse(result, e))
197 })
198 .and_then(|o| o.into())
199}
200
201pub fn kick<R>(
206 client: &R,
207 token: &str,
208 request: &KickRequest<'_>,
209) -> Result<KickResponse, KickError<R::Error>>
210where
211 R: SlackWebRequestSender,
212{
213 let params = vec![
214 Some(("token", token)),
215 Some(("channel", request.channel)),
216 Some(("user", request.user)),
217 ];
218 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
219 let url = crate::get_slack_url_for_method("channels.kick");
220 client
221 .send(&url, ¶ms[..])
222 .map_err(KickError::Client)
223 .and_then(|result| {
224 serde_json::from_str::<KickResponse>(&result)
225 .map_err(|e| KickError::MalformedResponse(result, e))
226 })
227 .and_then(|o| o.into())
228}
229
230pub fn leave<R>(
235 client: &R,
236 token: &str,
237 request: &LeaveRequest<'_>,
238) -> Result<LeaveResponse, LeaveError<R::Error>>
239where
240 R: SlackWebRequestSender,
241{
242 let params = vec![Some(("token", token)), Some(("channel", request.channel))];
243 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
244 let url = crate::get_slack_url_for_method("channels.leave");
245 client
246 .send(&url, ¶ms[..])
247 .map_err(LeaveError::Client)
248 .and_then(|result| {
249 serde_json::from_str::<LeaveResponse>(&result)
250 .map_err(|e| LeaveError::MalformedResponse(result, e))
251 })
252 .and_then(|o| o.into())
253}
254
255pub fn list<R>(
260 client: &R,
261 token: &str,
262 request: &ListRequest,
263) -> Result<ListResponse, ListError<R::Error>>
264where
265 R: SlackWebRequestSender,
266{
267 let params = vec![
268 Some(("token", token)),
269 request
270 .exclude_archived
271 .map(|exclude_archived| ("exclude_archived", if exclude_archived { "1" } else { "0" })),
272 request
273 .exclude_members
274 .map(|exclude_members| ("exclude_members", if exclude_members { "1" } else { "0" })),
275 ];
276 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
277 let url = crate::get_slack_url_for_method("channels.list");
278 client
279 .send(&url, ¶ms[..])
280 .map_err(ListError::Client)
281 .and_then(|result| {
282 serde_json::from_str::<ListResponse>(&result)
283 .map_err(|e| ListError::MalformedResponse(result, e))
284 })
285 .and_then(|o| o.into())
286}
287
288pub fn mark<R>(
293 client: &R,
294 token: &str,
295 request: &MarkRequest<'_>,
296) -> Result<MarkResponse, MarkError<R::Error>>
297where
298 R: SlackWebRequestSender,
299{
300 let ts = request.ts.to_param_value();
301 let params = vec![
302 Some(("token", token)),
303 Some(("channel", request.channel)),
304 Some(("ts", &ts[..])),
305 ];
306 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
307 let url = crate::get_slack_url_for_method("channels.mark");
308 client
309 .send(&url, ¶ms[..])
310 .map_err(MarkError::Client)
311 .and_then(|result| {
312 serde_json::from_str::<MarkResponse>(&result)
313 .map_err(|e| MarkError::MalformedResponse(result, e))
314 })
315 .and_then(|o| o.into())
316}
317
318pub fn rename<R>(
323 client: &R,
324 token: &str,
325 request: &RenameRequest<'_>,
326) -> Result<RenameResponse, RenameError<R::Error>>
327where
328 R: SlackWebRequestSender,
329{
330 let params = vec![
331 Some(("token", token)),
332 Some(("channel", request.channel)),
333 Some(("name", request.name)),
334 request
335 .validate
336 .map(|validate| ("validate", if validate { "1" } else { "0" })),
337 ];
338 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
339 let url = crate::get_slack_url_for_method("channels.rename");
340 client
341 .send(&url, ¶ms[..])
342 .map_err(RenameError::Client)
343 .and_then(|result| {
344 serde_json::from_str::<RenameResponse>(&result)
345 .map_err(|e| RenameError::MalformedResponse(result, e))
346 })
347 .and_then(|o| o.into())
348}
349
350pub fn replies<R>(
355 client: &R,
356 token: &str,
357 request: &RepliesRequest<'_>,
358) -> Result<RepliesResponse, RepliesError<R::Error>>
359where
360 R: SlackWebRequestSender,
361{
362 let thread_ts = request.thread_ts.to_param_value();
363 let params = vec![
364 Some(("token", token)),
365 Some(("channel", request.channel)),
366 Some(("thread_ts", &thread_ts[..])),
367 ];
368 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
369 let url = crate::get_slack_url_for_method("channels.replies");
370 client
371 .send(&url, ¶ms[..])
372 .map_err(RepliesError::Client)
373 .and_then(|result| {
374 serde_json::from_str::<RepliesResponse>(&result)
375 .map_err(|e| RepliesError::MalformedResponse(result, e))
376 })
377 .and_then(|o| o.into())
378}
379
380pub fn set_purpose<R>(
385 client: &R,
386 token: &str,
387 request: &SetPurposeRequest<'_>,
388) -> Result<SetPurposeResponse, SetPurposeError<R::Error>>
389where
390 R: SlackWebRequestSender,
391{
392 let params = vec![
393 Some(("token", token)),
394 Some(("channel", request.channel)),
395 Some(("purpose", request.purpose)),
396 ];
397 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
398 let url = crate::get_slack_url_for_method("channels.setPurpose");
399 client
400 .send(&url, ¶ms[..])
401 .map_err(SetPurposeError::Client)
402 .and_then(|result| {
403 serde_json::from_str::<SetPurposeResponse>(&result)
404 .map_err(|e| SetPurposeError::MalformedResponse(result, e))
405 })
406 .and_then(|o| o.into())
407}
408
409pub fn set_topic<R>(
414 client: &R,
415 token: &str,
416 request: &SetTopicRequest<'_>,
417) -> Result<SetTopicResponse, SetTopicError<R::Error>>
418where
419 R: SlackWebRequestSender,
420{
421 let params = vec![
422 Some(("token", token)),
423 Some(("channel", request.channel)),
424 Some(("topic", request.topic)),
425 ];
426 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
427 let url = crate::get_slack_url_for_method("channels.setTopic");
428 client
429 .send(&url, ¶ms[..])
430 .map_err(SetTopicError::Client)
431 .and_then(|result| {
432 serde_json::from_str::<SetTopicResponse>(&result)
433 .map_err(|e| SetTopicError::MalformedResponse(result, e))
434 })
435 .and_then(|o| o.into())
436}
437
438pub fn unarchive<R>(
443 client: &R,
444 token: &str,
445 request: &UnarchiveRequest<'_>,
446) -> Result<UnarchiveResponse, UnarchiveError<R::Error>>
447where
448 R: SlackWebRequestSender,
449{
450 let params = vec![Some(("token", token)), Some(("channel", request.channel))];
451 let params = params.into_iter().filter_map(|x| x).collect::<Vec<_>>();
452 let url = crate::get_slack_url_for_method("channels.unarchive");
453 client
454 .send(&url, ¶ms[..])
455 .map_err(UnarchiveError::Client)
456 .and_then(|result| {
457 serde_json::from_str::<UnarchiveResponse>(&result)
458 .map_err(|e| UnarchiveError::MalformedResponse(result, e))
459 })
460 .and_then(|o| o.into())
461}