slack_rust/conversations/
mark.rs

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