slack_web_api/entity/block_kit/
composition_objects.rs

1use serde_derive::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub enum SlackBlockKitCompositionObject {
5    ConfirmationDialog(CompositionObjectConfirmationDialog),
6    ConversationFilter(CompositionObjectConversationFilter),
7    DispatchActionConfiguration(CompositionObjectDispatchActionConfiguration),
8    InputParameter(CompositionObjectInputParameter),
9    Option(CompositionObjectOption),
10    OptionGroup(CompositionObjectOptionGroup),
11    Text(CompositionObjectText),
12    Trigger(CompositionObjectTrigger),
13    Workflow(CompositionObjectWorkflow),
14}
15
16/// https://api.slack.com/reference/block-kit/composition-objects#confirm
17#[derive(Debug, Default, Clone, Serialize, Deserialize)]
18pub struct CompositionObjectConfirmationDialog {
19    pub title: CompositionObjectText,
20    pub text: CompositionObjectText,
21    pub confirm: CompositionObjectText,
22    pub deny: CompositionObjectText,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub style: Option<String>,
25}
26
27/// https://api.slack.com/reference/block-kit/composition-objects#filter_conversations
28#[derive(Debug, Default, Clone, Serialize, Deserialize)]
29pub struct CompositionObjectConversationFilter {
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub include: Option<Vec<String>>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub exclude_external_shared_channels: Option<bool>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub exclude_bot_users: Option<bool>,
36}
37
38/// https://api.slack.com/reference/block-kit/composition-objects#dispatch_action_config
39#[derive(Debug, Default, Clone, Serialize, Deserialize)]
40pub struct CompositionObjectDispatchActionConfiguration {
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub trigger_actions_on: Option<Vec<String>>,
43}
44
45/// https://api.slack.com/reference/block-kit/composition-objects#input_parameter
46#[derive(Debug, Default, Clone, Serialize, Deserialize)]
47pub struct CompositionObjectInputParameter {
48    pub name: String,
49    pub value: String,
50}
51
52/// https://api.slack.com/reference/block-kit/composition-objects#option
53#[derive(Debug, Default, Clone, Serialize, Deserialize)]
54pub struct CompositionObjectOption {
55    pub text: String,
56    pub value: String,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub description: Option<CompositionObjectText>,
59    pub url: String,
60}
61
62/// https://api.slack.com/reference/block-kit/composition-objects#option_group
63#[derive(Debug, Default, Clone, Serialize, Deserialize)]
64pub struct CompositionObjectOptionGroup {
65    pub label: CompositionObjectText,
66    pub options: Vec<CompositionObjectOption>,
67}
68
69/// https://api.slack.com/reference/block-kit/composition-objects#text
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct CompositionObjectText {
72    #[serde(rename = "type")]
73    pub object_type: String,
74    pub text: String,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub emoji: Option<bool>,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub varbatim: Option<bool>,
79}
80
81impl Default for CompositionObjectText {
82    fn default() -> Self {
83        CompositionObjectText {
84            object_type: "plain_text".to_string(),
85            text: "".to_string(),
86            emoji: None,
87            varbatim: None,
88        }
89    }
90}
91
92impl CompositionObjectText {
93    pub fn new(text: &str) -> Self {
94        CompositionObjectText {
95            text: text.to_string(),
96            ..CompositionObjectText::default()
97        }
98    }
99}
100
101/// https://api.slack.com/reference/block-kit/composition-objects#trigger
102#[derive(Debug, Default, Clone, Serialize, Deserialize)]
103pub struct CompositionObjectTrigger {
104    pub url: String,
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub customizable_input_parameters: Option<Vec<CompositionObjectInputParameter>>,
107}
108
109/// https://api.slack.com/reference/block-kit/composition-objects#workflow
110#[derive(Debug, Default, Clone, Serialize, Deserialize)]
111pub struct CompositionObjectWorkflow {
112    pub trigger: CompositionObjectTrigger,
113}