slack_api/sync/mods/
channels.rs

1//=============================================================================
2//
3//                    WARNING: This file is AUTO-GENERATED
4//
5// Do not make changes directly to this file.
6//
7// If you would like to make a change to the library, please update the schema
8// definitions at https://github.com/slack-rs/slack-api-schemas
9//
10// If you would like to make a change how the library was generated,
11// please edit https://github.com/slack-rs/slack-rs-api/tree/master/codegen
12//
13//=============================================================================
14
15//! Get info on your team's Slack channels, create or archive channels, invite users, set the topic and purpose, and mark a channel as read.
16
17pub use crate::mod_types::channels_types::*;
18use crate::sync::requests::SlackWebRequestSender;
19
20/// Archives a channel.
21///
22/// Wraps https://api.slack.com/methods/channels.archive
23
24pub 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, &params[..])
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
45/// Creates a channel.
46///
47/// Wraps https://api.slack.com/methods/channels.create
48
49pub 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, &params[..])
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
76/// Fetches history of messages and events from a channel.
77///
78/// Wraps https://api.slack.com/methods/channels.history
79
80pub 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, &params[..])
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
116/// Gets information about a channel.
117///
118/// Wraps https://api.slack.com/methods/channels.info
119
120pub 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, &params[..])
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
141/// Invites a user to a channel.
142///
143/// Wraps https://api.slack.com/methods/channels.invite
144
145pub 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, &params[..])
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
170/// Joins a channel, creating it if needed.
171///
172/// Wraps https://api.slack.com/methods/channels.join
173
174pub 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, &params[..])
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
201/// Removes a user from a channel.
202///
203/// Wraps https://api.slack.com/methods/channels.kick
204
205pub 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, &params[..])
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
230/// Leaves a channel.
231///
232/// Wraps https://api.slack.com/methods/channels.leave
233
234pub 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, &params[..])
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
255/// Lists all channels in a Slack team.
256///
257/// Wraps https://api.slack.com/methods/channels.list
258
259pub 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, &params[..])
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
288/// Sets the read cursor in a channel.
289///
290/// Wraps https://api.slack.com/methods/channels.mark
291
292pub 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, &params[..])
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
318/// Renames a channel.
319///
320/// Wraps https://api.slack.com/methods/channels.rename
321
322pub 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, &params[..])
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
350/// Retrieve a thread of messages posted to a channel
351///
352/// Wraps https://api.slack.com/methods/channels.replies
353
354pub 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, &params[..])
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
380/// Sets the purpose for a channel.
381///
382/// Wraps https://api.slack.com/methods/channels.setPurpose
383
384pub 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, &params[..])
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
409/// Sets the topic for a channel.
410///
411/// Wraps https://api.slack.com/methods/channels.setTopic
412
413pub 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, &params[..])
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
438/// Unarchives a channel.
439///
440/// Wraps https://api.slack.com/methods/channels.unarchive
441
442pub 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, &params[..])
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}