slack_blocks_render/
visitor.rs1use despatma::visitor;
2use slack_morphism::prelude::*;
3
4pub(crate) struct SlackEventBlock {
5 #[allow(dead_code)]
6 pub json_value: serde_json::Value,
7}
8
9pub(crate) struct SlackRichTextBlock {
10 pub json_value: serde_json::Value,
11}
12
13visitor!(
14 #[
15 helper_tmpl = {
16 match slack_block {
17 SlackBlock::Section(section) => visitor.visit_slack_section_block(section),
18 SlackBlock::Header(header) => visitor.visit_slack_header_block(header),
19 SlackBlock::Divider(divider) => visitor.visit_slack_divider_block(divider),
20 SlackBlock::Image(image) => visitor.visit_slack_image_block(image),
21 SlackBlock::Actions(actions) => visitor.visit_slack_actions_block(actions),
22 SlackBlock::Context(context) => visitor.visit_slack_context_block(context),
23 SlackBlock::Input(input) => visitor.visit_slack_input_block(input),
24 SlackBlock::File(file) => visitor.visit_slack_file_block(file),
25 SlackBlock::Video(video) => visitor.visit_slack_video_block(video),
26 SlackBlock::RichText(json_value) => visitor.visit_slack_rich_text_block(&SlackRichTextBlock { json_value: json_value.clone() }),
27 SlackBlock::Event(json_value) => visitor.visit_slack_event_block(&SlackEventBlock { json_value: json_value.clone() }),
28 SlackBlock::Markdown(markdown) => visitor.visit_slack_markdown_block(markdown)
29 }
30 },
31 ]
32 SlackBlock,
33 #[
34 helper_tmpl = {
35 if let Some(text) = &slack_section_block.text {
36 visitor.visit_slack_block_text(text);
37 }
38 if let Some(fields) = &slack_section_block.fields {
39 for field in fields {
40 visitor.visit_slack_block_text(field);
41 }
42 }
43 },
44 ]
45 SlackSectionBlock,
46 #[
47 helper_tmpl = {
48 match slack_block_text {
49 SlackBlockText::Plain(plain) => visitor.visit_slack_block_plain_text(plain),
50 SlackBlockText::MarkDown(markdown) => visitor.visit_slack_block_mark_down_text(markdown),
51 }
52 },
53 ]
54 SlackBlockText,
55 SlackBlockPlainText,
56 #[
57 helper_tmpl = {
58 let slack_block_text = slack_header_block.text.clone().into();
59 visitor.visit_slack_block_text(&slack_block_text);
60 },
61 ]
62 SlackHeaderBlock,
63 SlackDividerBlock,
64 SlackImageBlock,
65 SlackBlockImageElement,
66 SlackActionsBlock,
67 #[
68 helper_tmpl = {
69 for element in &slack_context_block.elements {
70 match element {
71 SlackContextBlockElement::Image(image) => visitor.visit_slack_block_image_element(image),
72 SlackContextBlockElement::Plain(text) => visitor.visit_slack_block_plain_text(text),
73 SlackContextBlockElement::MarkDown(markdown) => visitor.visit_slack_block_mark_down_text(markdown),
74 }
75 }
76 },
77 ]
78 SlackContextBlock,
79 SlackBlockMarkDownText,
80 SlackInputBlock,
81 SlackFileBlock,
82 SlackVideoBlock,
83 SlackEventBlock,
84 SlackRichTextBlock,
85 SlackMarkdownBlock,
86);