slack_web_api/
builder.rs

1use crate::api::{SlackApiChatPostMessageRequest, SlackMessageAttachment};
2use crate::SlackBlock;
3
4pub struct SlackMessageBuilder {
5    pub(crate) inner: SlackApiChatPostMessageRequest,
6}
7
8impl From<SlackMessageBuilder> for SlackApiChatPostMessageRequest {
9    fn from(value: SlackMessageBuilder) -> Self {
10        value.inner
11    }
12}
13
14impl SlackMessageBuilder {
15    pub fn new() -> SlackMessageBuilder {
16        SlackMessageBuilder {
17            inner: SlackApiChatPostMessageRequest::default(),
18        }
19    }
20
21    pub fn channel<S: Into<String>>(mut self, channel: S) -> SlackMessageBuilder {
22        let mut inner = self.inner;
23        inner.channel = channel.into();
24        SlackMessageBuilder { inner }
25    }
26    pub fn icon_emoji<S: Into<String>>(mut self, icon_emoji: S) -> SlackMessageBuilder {
27        let mut inner = self.inner;
28        inner.icon_emoji = Some(icon_emoji.into());
29        SlackMessageBuilder { inner }
30    }
31    pub fn username<S: Into<String>>(mut self, username: S) -> SlackMessageBuilder {
32        let mut inner = self.inner;
33        inner.username = Some(username.into());
34        SlackMessageBuilder { inner }
35    }
36    pub fn attachments<A: Into<SlackMessageAttachment>>(mut self, attachments: Vec<A>) -> SlackMessageBuilder {
37        let mut inner = self.inner;
38        let mut values = vec![];
39        for attachment in attachments {
40            values.push(attachment.into());
41        }
42        inner.attachments = Some(values);
43        SlackMessageBuilder { inner }
44    }
45
46}
47
48pub struct SlackAttachmentBuilder {
49    pub(crate) inner: SlackMessageAttachment,
50}
51
52impl From<SlackAttachmentBuilder> for SlackMessageAttachment {
53    fn from(value: SlackAttachmentBuilder) -> Self {
54        value.inner
55    }
56}
57
58impl SlackAttachmentBuilder {
59    pub fn new() -> SlackAttachmentBuilder {
60        SlackAttachmentBuilder {
61            inner: SlackMessageAttachment::default(),
62        }
63    }
64    pub fn color<S: Into<String>>(mut self, color: S) -> SlackAttachmentBuilder {
65        let mut inner = self.inner;
66        inner.color = Some(color.into());
67        SlackAttachmentBuilder { inner }
68    }
69
70    pub fn block<B: Into<SlackBlock>>(mut self, block: B) -> SlackAttachmentBuilder {
71        let mut inner = self.inner;
72        let mut blocks = inner.blocks.unwrap_or_default();
73        blocks.push(block.into());
74        inner.blocks = Some(blocks);
75        SlackAttachmentBuilder { inner }
76    }
77    pub fn blocks<B: Into<SlackBlock>>(mut self, blocks: Vec<B>) -> SlackAttachmentBuilder {
78        let mut inner = self.inner;
79        let mut blocks = blocks;
80        let mut values = vec![];
81        for blocks in blocks {
82            values.push(blocks.into());
83        }
84        inner.blocks = Some(values);
85        SlackAttachmentBuilder { inner }
86    }
87}