slack_rust/block/
block_image.rs

1//! A simple image block, designed to make those cat photos really pop.
2
3use crate::block::block_object::TextBlockObject;
4use serde::{Deserialize, Serialize};
5use serde_with::skip_serializing_none;
6
7/// A simple image block, designed to make those cat photos really pop.  
8/// See: <https://api.slack.com/reference/block-kit/blocks#image>
9#[skip_serializing_none]
10#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
11pub struct ImageBlock {
12    pub image_url: String,
13    pub alt_text: String,
14    pub title: Option<TextBlockObject>,
15    pub block_id: Option<String>,
16}
17
18impl ImageBlock {
19    pub fn builder(image_url: String, alt_text: String) -> ImageBlockBuilder {
20        ImageBlockBuilder::new(image_url, alt_text)
21    }
22}
23
24#[derive(Debug, Default)]
25pub struct ImageBlockBuilder {
26    pub image_url: String,
27    pub alt_text: String,
28    pub title: Option<TextBlockObject>,
29    pub block_id: Option<String>,
30}
31
32impl ImageBlockBuilder {
33    pub fn new(image_url: String, alt_text: String) -> ImageBlockBuilder {
34        ImageBlockBuilder {
35            image_url,
36            alt_text,
37            ..Default::default()
38        }
39    }
40    pub fn title(mut self, title: TextBlockObject) -> ImageBlockBuilder {
41        self.title = Some(title);
42        self
43    }
44    pub fn block_id(mut self, block_id: String) -> ImageBlockBuilder {
45        self.block_id = Some(block_id);
46        self
47    }
48    pub fn build(self) -> ImageBlock {
49        ImageBlock {
50            image_url: self.image_url,
51            alt_text: self.alt_text,
52            title: self.title,
53            block_id: self.block_id,
54        }
55    }
56}