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}