slack_messaging/blocks/
file.rs

1use serde::Serialize;
2
3/// [File block](https://docs.slack.dev/reference/block-kit/blocks/file-block)
4/// representation.
5///
6/// # Example
7///
8/// ```
9/// # use slack_messaging::blocks::{File, FileSource};
10/// let file = File::builder()
11///     .external_id("ABCD1")
12///     .source(FileSource::Remote)
13///     .build();
14///
15/// let expected = serde_json::json!({
16///     "type": "file",
17///     "external_id": "ABCD1",
18///     "source": "remote"
19/// });
20///
21/// let json = serde_json::to_value(file).unwrap();
22///
23/// assert_eq!(json, expected);
24/// ```
25#[derive(Debug, Clone, Serialize)]
26pub struct File {
27    #[serde(rename = "type")]
28    pub(super) kind: &'static str,
29
30    pub(super) external_id: String,
31
32    pub(super) source: FileSource,
33
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub(super) block_id: Option<String>,
36}
37
38/// Values that can be set to the [File]'s source field.
39#[derive(Debug, Clone, Serialize)]
40#[serde(rename_all = "snake_case")]
41pub enum FileSource {
42    Remote,
43}