slack_messaging/composition_objects/
text.rs1use super::{MrkdwnText, PlainText};
2use serde::Serialize;
3
4#[derive(Debug, Clone, Serialize)]
23#[serde(untagged)]
24pub enum Text {
25 Plain(PlainText),
26 Mrkdwn(MrkdwnText),
27}
28
29impl From<PlainText> for Text {
30 fn from(value: PlainText) -> Self {
31 Self::Plain(value)
32 }
33}
34
35impl From<MrkdwnText> for Text {
36 fn from(value: MrkdwnText) -> Self {
37 Self::Mrkdwn(value)
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn it_is_serialized_without_enum_tag() {
47 let text: Text = PlainText::builder()
48 .text("hello world")
49 .emoji(true)
50 .build()
51 .into();
52
53 let json = serde_json::to_value(text).unwrap();
54
55 let expected = serde_json::json!({
56 "type": "plain_text",
57 "text": "hello world",
58 "emoji": true
59 });
60
61 assert_eq!(json, expected);
62
63 let text: Text = MrkdwnText::builder()
64 .text("hello world")
65 .verbatim(true)
66 .build()
67 .into();
68
69 let json = serde_json::to_value(text).unwrap();
70
71 let expected = serde_json::json!({
72 "type": "mrkdwn",
73 "text": "hello world",
74 "verbatim": true
75 });
76
77 assert_eq!(json, expected);
78 }
79}