slack_rust/conversations/
mark.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 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(¶m)?;
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, ¶m, &"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}