slack_morphism_models/events/
interaction.rs1use rsb_derive::Builder;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5use crate::blocks::*;
6use crate::common::*;
7use crate::messages::*;
8use std::collections::HashMap;
9
10#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
11#[serde(tag = "type")]
12pub enum SlackInteractionEvent {
13 #[serde(rename = "block_actions")]
14 BlockActions(SlackInteractionBlockActionsEvent),
15 #[serde(rename = "dialog_submission")]
16 DialogSubmission(SlackInteractionDialogueSubmissionEvent),
17 #[serde(rename = "message_action")]
18 MessageAction(SlackInteractionMessageActionEvent),
19 #[serde(rename = "shortcut")]
20 Shortcut(SlackInteractionShortcutEvent),
21 #[serde(rename = "view_submission")]
22 ViewSubmission(SlackInteractionViewSubmissionEvent),
23 #[serde(rename = "view_closed")]
24 ViewClosed(SlackInteractionViewClosedEvent),
25}
26
27#[skip_serializing_none]
28#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
29pub struct SlackInteractionBlockActionsEvent {
30 pub team: SlackBasicTeamInfo,
31 pub user: Option<SlackBasicUserInfo>,
32 pub api_app_id: SlackAppId,
33 pub container: SlackInteractionActionContainer,
34 pub trigger_id: SlackTriggerId,
35 pub channel: Option<SlackBasicChannelInfo>,
36 pub message: Option<SlackHistoryMessage>,
37 pub view: Option<SlackView>,
38 pub response_url: Option<SlackResponseUrl>,
39 pub actions: Option<Vec<SlackInteractionActionInfo>>,
40}
41
42#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
43#[serde(tag = "type")]
44pub enum SlackInteractionActionContainer {
45 #[serde(rename = "message")]
46 Message(SlackInteractionActionMessageContainer),
47 #[serde(rename = "view")]
48 View(SlackInteractionActionViewContainer),
49}
50
51#[skip_serializing_none]
52#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
53pub struct SlackInteractionActionMessageContainer {
54 pub message_ts: SlackTs,
55 pub channel_id: Option<SlackChannelId>,
56 pub is_ephemeral: Option<bool>,
57 pub is_app_unfurl: Option<bool>,
58}
59
60#[skip_serializing_none]
61#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
62pub struct SlackInteractionActionViewContainer {
63 pub view_id: SlackViewId,
64}
65
66#[skip_serializing_none]
67#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
68pub struct SlackInteractionActionInfo {
69 #[serde(rename = "type")]
70 pub action_type: SlackActionType,
71 pub action_id: SlackActionId,
72 pub block_id: Option<SlackBlockId>,
73 pub text: Option<SlackBlockText>,
74 pub value: Option<String>,
75 pub selected_option: Option<SlackBlockChoiceItem<SlackBlockText>>,
76 pub action_ts: Option<SlackTs>,
77}
78
79#[skip_serializing_none]
80#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
81pub struct SlackInteractionDialogueSubmissionEvent {
82 pub team: SlackBasicTeamInfo,
83 pub user: SlackBasicUserInfo,
84 pub channel: Option<SlackBasicChannelInfo>,
85 #[serde(with = "serde_with::rust::string_empty_as_none")]
86 pub callback_id: Option<SlackCallbackId>,
87 pub state: Option<String>,
88 pub submission: HashMap<String, String>,
89}
90
91#[skip_serializing_none]
92#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
93pub struct SlackInteractionMessageActionEvent {
94 pub team: SlackBasicTeamInfo,
95 pub user: SlackBasicUserInfo,
96 pub channel: Option<SlackBasicChannelInfo>,
97 pub message: Option<SlackHistoryMessage>,
98 pub callback_id: SlackCallbackId,
99 pub trigger_id: SlackTriggerId,
100 pub response_url: SlackResponseUrl,
101 pub actions: Option<Vec<SlackInteractionActionInfo>>,
102}
103
104#[skip_serializing_none]
105#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
106pub struct SlackInteractionShortcutEvent {
107 pub team: SlackBasicTeamInfo,
108 pub user: SlackBasicUserInfo,
109 pub callback_id: SlackCallbackId,
110 pub trigger_id: SlackTriggerId,
111 pub actions: Option<Vec<SlackInteractionActionInfo>>,
112}
113
114#[skip_serializing_none]
115#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
116pub struct SlackInteractionViewSubmissionEvent {
117 pub team: SlackBasicTeamInfo,
118 pub user: SlackBasicUserInfo,
119 pub view: SlackStatefulView,
120 pub trigger_id: Option<SlackTriggerId>,
121}
122
123#[skip_serializing_none]
124#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
125pub struct SlackInteractionViewClosedEvent {
126 pub team: SlackBasicTeamInfo,
127 pub user: SlackBasicUserInfo,
128 pub view: SlackStatefulView,
129 pub trigger_id: Option<SlackTriggerId>,
130}