slack_messaging/
macros.rs

1/// Construct a `plain_text` [Text](crate::composition_objects::Text).
2///
3/// ```
4/// # use slack_messaging::plain_text;
5/// # use slack_messaging::composition_objects::Text;
6/// let text = plain_text!("Hello, World!");
7/// let expected = Text::builder()
8///     .plain_text("Hello, World!")
9///     .build();
10///
11/// assert_eq!(text, expected);
12///
13/// // You can use this like format! macro.
14/// let greet = "Hi";
15/// let name = "Tanaka";
16///
17/// let text = plain_text!("{greet}, {name}!");
18/// let expected = Text::builder()
19///     .plain_text("Hi, Tanaka!")
20///     .build();
21///
22/// assert_eq!(text, expected);
23/// ```
24#[macro_export]
25macro_rules! plain_text {
26    ($fmt:expr) => {
27        $crate::composition_objects::Text::builder()
28            .plain_text(format!($fmt))
29            .build()
30    };
31    ($fmt:expr, $($arg:tt)+) => {
32        $crate::composition_objects::Text::builder()
33            .plain_text(format!($fmt, $($arg)+))
34            .build()
35    };
36}
37
38/// Construct a `mrkdwn` [Text](crate::composition_objects::Text).
39///
40/// ```
41/// # use slack_messaging::mrkdwn;
42/// # use slack_messaging::composition_objects::Text;
43/// let text = mrkdwn!("Hello, World!");
44/// let expected = Text::builder()
45///     .mrkdwn("Hello, World!")
46///     .build();
47///
48/// assert_eq!(text, expected);
49///
50/// // You can use this like format! macro.
51/// let greet = "Hi";
52/// let name = "Tanaka";
53///
54/// let text = mrkdwn!("{greet}, {name}!");
55/// let expected = Text::builder()
56///     .mrkdwn("Hi, Tanaka!")
57///     .build();
58///
59/// assert_eq!(text, expected);
60/// ```
61#[macro_export]
62macro_rules! mrkdwn {
63    ($fmt:expr) => {
64        $crate::composition_objects::Text::builder()
65            .mrkdwn(format!($fmt))
66            .build()
67    };
68    ($fmt:expr, $($arg:tt)+) => {
69        $crate::composition_objects::Text::builder()
70            .mrkdwn(format!($fmt, $($arg)+))
71            .build()
72    };
73}
74
75#[cfg(test)]
76mod tests {
77    use crate::composition_objects::Text;
78
79    #[test]
80    fn it_works_macro_plain_text_given_expression() {
81        let text = plain_text!("Hello, Tanaka!");
82        let expected = Text::builder().plain_text("Hello, Tanaka!").build();
83        assert_eq!(text, expected);
84    }
85
86    #[test]
87    fn it_works_macro_plain_text_given_expression_and_tokens() {
88        let name = "Tanaka";
89        let text = plain_text!("Hello, {name}!");
90        let expected = Text::builder().plain_text("Hello, Tanaka!").build();
91        assert_eq!(text, expected);
92    }
93
94    #[test]
95    fn it_works_macro_mrkdwn_given_expression() {
96        let text = mrkdwn!("Hello, Tanaka!");
97        let expected = Text::builder().mrkdwn("Hello, Tanaka!").build();
98        assert_eq!(text, expected);
99    }
100
101    #[test]
102    fn it_works_macro_mrkdwn_given_expression_and_tokens() {
103        let name = "Tanaka";
104        let text = mrkdwn!("Hello, {name}!");
105        let expected = Text::builder().mrkdwn("Hello, Tanaka!").build();
106        assert_eq!(text, expected);
107    }
108}