1use crate::blocks;
2use crate::composition::Text;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Deserialize, Serialize)]
6pub struct Message {
7 #[serde(default, skip_serializing_if = "Option::is_none")]
8 pub text: Option<String>,
9
10 #[serde(default, skip_serializing_if = "Vec::is_empty")]
11 pub blocks: Vec<blocks::Block>,
12
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub thread_ts: Option<String>,
15
16 #[serde(default = "default_mrkdwn")]
17 pub mrkdwn: bool,
18}
19
20fn default_mrkdwn() -> bool {
21 true
22}
23
24impl Default for Message {
25 fn default() -> Self {
26 Self {
27 text: None,
28 blocks: Vec::new(),
29 thread_ts: None,
30 mrkdwn: true,
31 }
32 }
33}
34
35#[derive(Debug, Deserialize, Serialize, Default)]
36pub struct Modal {
37 pub title: Text,
38
39 pub submit: Text,
40 pub close: Text,
41
42 #[serde(default, skip_serializing_if = "Vec::is_empty")]
43 pub blocks: Vec<blocks::Block>,
44}