slack-web-api 0.1.1

SlackWebAPI for Rust
Documentation
use crate::api::{SlackApiChatPostMessageRequest, SlackMessageAttachment};
use crate::SlackBlock;

pub struct SlackMessageBuilder {
    pub(crate) inner: SlackApiChatPostMessageRequest,
}

impl From<SlackMessageBuilder> for SlackApiChatPostMessageRequest {
    fn from(value: SlackMessageBuilder) -> Self {
        value.inner
    }
}

impl SlackMessageBuilder {
    pub fn new() -> SlackMessageBuilder {
        SlackMessageBuilder {
            inner: SlackApiChatPostMessageRequest::default(),
        }
    }

    pub fn channel<S: Into<String>>(mut self, channel: S) -> SlackMessageBuilder {
        let mut inner = self.inner;
        inner.channel = channel.into();
        SlackMessageBuilder { inner }
    }
    pub fn icon_emoji<S: Into<String>>(mut self, icon_emoji: S) -> SlackMessageBuilder {
        let mut inner = self.inner;
        inner.icon_emoji = Some(icon_emoji.into());
        SlackMessageBuilder { inner }
    }
    pub fn username<S: Into<String>>(mut self, username: S) -> SlackMessageBuilder {
        let mut inner = self.inner;
        inner.username = Some(username.into());
        SlackMessageBuilder { inner }
    }
    pub fn attachments<A: Into<SlackMessageAttachment>>(mut self, attachments: Vec<A>) -> SlackMessageBuilder {
        let mut inner = self.inner;
        let mut values = vec![];
        for attachment in attachments {
            values.push(attachment.into());
        }
        inner.attachments = Some(values);
        SlackMessageBuilder { inner }
    }

}

pub struct SlackAttachmentBuilder {
    pub(crate) inner: SlackMessageAttachment,
}

impl From<SlackAttachmentBuilder> for SlackMessageAttachment {
    fn from(value: SlackAttachmentBuilder) -> Self {
        value.inner
    }
}

impl SlackAttachmentBuilder {
    pub fn new() -> SlackAttachmentBuilder {
        SlackAttachmentBuilder {
            inner: SlackMessageAttachment::default(),
        }
    }
    pub fn color<S: Into<String>>(mut self, color: S) -> SlackAttachmentBuilder {
        let mut inner = self.inner;
        inner.color = Some(color.into());
        SlackAttachmentBuilder { inner }
    }

    pub fn block<B: Into<SlackBlock>>(mut self, block: B) -> SlackAttachmentBuilder {
        let mut inner = self.inner;
        let mut blocks = inner.blocks.unwrap_or_default();
        blocks.push(block.into());
        inner.blocks = Some(blocks);
        SlackAttachmentBuilder { inner }
    }
    pub fn blocks<B: Into<SlackBlock>>(mut self, blocks: Vec<B>) -> SlackAttachmentBuilder {
        let mut inner = self.inner;
        let mut blocks = blocks;
        let mut values = vec![];
        for blocks in blocks {
            values.push(blocks.into());
        }
        inner.blocks = Some(values);
        SlackAttachmentBuilder { inner }
    }
}