slack_web_api/entity/block_kit/
composition_objects.rs1use 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#[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#[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#[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#[derive(Debug, Default, Clone, Serialize, Deserialize)]
47pub struct CompositionObjectInputParameter {
48 pub name: String,
49 pub value: String,
50}
51
52#[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#[derive(Debug, Default, Clone, Serialize, Deserialize)]
64pub struct CompositionObjectOptionGroup {
65 pub label: CompositionObjectText,
66 pub options: Vec<CompositionObjectOption>,
67}
68
69#[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#[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#[derive(Debug, Default, Clone, Serialize, Deserialize)]
111pub struct CompositionObjectWorkflow {
112 pub trigger: CompositionObjectTrigger,
113}