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#[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}