Skip to main content

block_kit/api/
chat.rs

1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4pub struct ChatMessage {
5    pub text: String,
6    pub username: String,
7    pub bot_id: String,
8    #[serde(rename = "type")]
9    pub type_name: String,
10    pub subtype: String,
11    pub ts: String,
12}
13
14/// Reference:
15/// https://api.slack.com/methods/chat.postMessage
16#[derive(Debug, Deserialize)]
17pub struct PostMessageResponse {
18    pub ok: bool,
19    pub error: Option<String>,
20    pub channel: Option<String>,
21    pub ts: Option<String>,
22    pub message: Option<ChatMessage>,
23}
24
25#[cfg(test)]
26mod test {
27    use super::*;
28
29    #[test]
30    fn test_de_ok() {
31        let json = r#"{
32  "ok": true,
33  "channel": "random",
34  "ts": "150",
35  "message": {
36    "text": "hello",
37    "username": "bot",
38    "bot_id": "id",
39    "type": "message",
40    "subtype": "bot_message",
41    "ts": "150"
42  }
43}"#;
44        let res = serde_json::from_str::<PostMessageResponse>(json).unwrap();
45        assert!(res.ok);
46        assert_eq!(res.channel.unwrap(), "random");
47        assert_eq!(res.ts.unwrap(), "150");
48
49        let message = res.message.unwrap();
50        assert_eq!(message.text, "hello");
51        assert_eq!(message.username, "bot");
52        assert_eq!(message.bot_id, "id");
53        assert_eq!(message.type_name, "message");
54        assert_eq!(message.subtype, "bot_message");
55        assert_eq!(message.ts, "150");
56    }
57
58    #[test]
59    fn test_de_err() {
60        let json = r#"{
61  "ok": false,
62  "error": "error"
63}"#;
64        let res = serde_json::from_str::<PostMessageResponse>(json).unwrap();
65        assert!(!res.ok);
66        assert_eq!(res.error.unwrap(), "error");
67    }
68}