slack_rust/conversations/
archive.rs1use crate::error::Error;
2use crate::http_client::{get_slack_url, DefaultResponse, SlackWebAPIClient};
3use serde::{Deserialize, Serialize};
4
5#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
6pub struct ArchiveRequest {
7 pub channel: String,
8}
9
10pub async fn archive<T>(
11 client: &T,
12 param: &ArchiveRequest,
13 bot_token: &str,
14) -> Result<DefaultResponse, Error>
15where
16 T: SlackWebAPIClient,
17{
18 let url = get_slack_url("conversations.archive");
19 let json = serde_json::to_string(¶m)?;
20
21 client
22 .post_json(&url, &json, bot_token)
23 .await
24 .and_then(|result| {
25 serde_json::from_str::<DefaultResponse>(&result).map_err(Error::SerdeJsonError)
26 })
27}
28
29#[cfg(test)]
30mod test {
31 use super::*;
32 use crate::http_client::MockSlackWebAPIClient;
33
34 #[test]
35 fn convert_request() {
36 let request = ArchiveRequest {
37 channel: "C1234567890".to_string(),
38 };
39 let json = r##"{
40 "channel": "C1234567890"
41}"##;
42
43 let j = serde_json::to_string_pretty(&request).unwrap();
44 assert_eq!(json, j);
45
46 let s = serde_json::from_str::<ArchiveRequest>(json).unwrap();
47 assert_eq!(request, s);
48 }
49
50 #[async_std::test]
51 async fn test_archive() {
52 let param = ArchiveRequest {
53 channel: "C1234567890".to_string(),
54 };
55
56 let mut mock = MockSlackWebAPIClient::new();
57 mock.expect_post_json().returning(|_, _, _| {
58 Ok(r##"{
59 "ok": true
60}"##
61 .to_string())
62 });
63
64 let response = archive(&mock, ¶m, &"test_token".to_string())
65 .await
66 .unwrap();
67 let expect = DefaultResponse {
68 ok: true,
69 ..Default::default()
70 };
71
72 assert_eq!(expect, response);
73 }
74}