slack_morphism_models/events/
interaction.rs

1use 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}