slack_morphism_models/events/
push.rs1use rsb_derive::Builder;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4use url::Url;
5
6use crate::blocks::*;
7use crate::common::*;
8use crate::events::*;
9use crate::messages::*;
10
11#[allow(clippy::large_enum_variant)]
12#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
13#[serde(tag = "type")]
14pub enum SlackPushEvent {
15 #[serde(rename = "url_verification")]
16 UrlVerification(SlackUrlVerificationEvent),
17 #[serde(rename = "event_callback")]
18 EventCallback(SlackPushEventCallback),
19 #[serde(rename = "app_rate_limited")]
20 AppRateLimited(SlackAppRateLimitedEvent),
21}
22
23#[skip_serializing_none]
24#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
25pub struct SlackUrlVerificationEvent {
26 pub challenge: String,
27}
28
29#[skip_serializing_none]
30#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
31pub struct SlackAppRateLimitedEvent {
32 pub team_id: String,
33 pub minute_rate_limited: SlackDateTime,
34 pub api_app_id: String,
35}
36
37#[skip_serializing_none]
38#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
39pub struct SlackPushEventCallback {
40 pub team_id: SlackTeamId,
41 pub api_app_id: SlackAppId,
42 pub event: SlackEventCallbackBody,
43 pub event_id: SlackEventId,
44 pub event_time: SlackDateTime,
45 pub event_context: Option<SlackEventContext>,
46 pub authed_users: Option<Vec<SlackUserId>>,
47 pub authorizations: Option<Vec<SlackEventAuthorization>>,
48}
49
50#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
51#[serde(tag = "type", rename_all = "snake_case")]
52pub enum SlackEventCallbackBody {
53 Message(SlackMessageEvent),
54 AppHomeOpened(SlackAppHomeOpenedEvent),
55 AppMention(SlackAppMentionEvent),
56 AppUninstalled(SlackAppUninstalledEvent),
57 LinkShared(SlackLinkSharedEvent),
58 EmojiChanged(SlackEmojiChangedEvent),
59}
60
61#[skip_serializing_none]
62#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
63pub struct SlackMessageEvent {
64 #[serde(flatten)]
65 pub origin: SlackMessageOrigin,
66 #[serde(flatten)]
67 pub content: Option<SlackMessageContent>,
68 #[serde(flatten)]
69 pub sender: SlackMessageSender,
70 pub subtype: Option<SlackMessageEventType>,
71 pub hidden: Option<bool>,
72 pub edited: Option<SlackMessageEventEdited>,
73 pub deleted_ts: Option<SlackTs>,
74}
75
76#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
77pub enum SlackMessageEventType {
78 #[serde(rename = "bot_message")]
79 BotMessage,
80 #[serde(rename = "me_message")]
81 MeMessage,
82 #[serde(rename = "channel_join")]
83 ChannelJoin,
84 #[serde(rename = "channel_leave")]
85 ChannelLeave,
86 #[serde(rename = "bot_add")]
87 BotAdd,
88 #[serde(rename = "bot_remove")]
89 BotRemove,
90 #[serde(rename = "channel_topic")]
91 ChannelTopic,
92 #[serde(rename = "channel_purpose")]
93 ChannelPurpose,
94 #[serde(rename = "channel_name")]
95 ChannelName,
96 #[serde(rename = "file_share")]
97 FileShare,
98 #[serde(rename = "message_changed")]
99 MessageChanged,
100 #[serde(rename = "message_deleted")]
101 MessageDeleted,
102 #[serde(rename = "thread_broadcast")]
103 ThreadBroadcast,
104 #[serde(rename = "tombstone")]
105 Tombstone,
106 #[serde(rename = "joiner_notification")]
107 JoinerNotification,
108 #[serde(rename = "slackbot_response")]
109 SlackbotResponse,
110 #[serde(rename = "emoji_changed")]
111 EmojiChanged,
112}
113
114#[skip_serializing_none]
115#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
116pub struct SlackAppHomeOpenedEvent {
117 pub user: SlackUserId,
118 pub channel: SlackChannelId,
119 pub tab: String,
120 pub view: Option<SlackView>,
121}
122
123#[skip_serializing_none]
124#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
125pub struct SlackAppMentionEvent {
126 pub user: SlackUserId,
127 pub channel: SlackChannelId,
128 #[serde(flatten)]
129 pub content: SlackMessageContent,
130 #[serde(flatten)]
131 pub origin: SlackMessageOrigin,
132}
133
134type SlackMessageEventEdited = SlackMessageEdited;
135
136#[skip_serializing_none]
137#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
138pub struct SlackAppUninstalledEvent {}
139
140#[skip_serializing_none]
141#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
142pub struct SlackLinkSharedEvent {
143 pub channel: SlackChannelId,
144 pub event_ts: SlackTs,
145 pub is_bot_user_member: bool,
146 pub links: Vec<SlackLinkObject>,
147 pub message_ts: SlackTs,
148 pub source: String,
149 pub unfurl_id: SlackUnfurlId,
150 pub user: SlackUserId,
151}
152
153#[skip_serializing_none]
154#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
155pub struct SlackEmojiChangedEvent {
156 pub subtype: SlackEmojiEventType,
157 pub name: Option<String>,
158 pub names: Option<Vec<String>>,
159 pub old_name: Option<String>,
160 pub new_name: Option<String>,
161 pub value: Option<Url>,
162 pub event_ts: SlackTs,
163}
164
165#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
166pub enum SlackEmojiEventType {
167 #[serde(rename = "remove")]
168 EmojiRemoved,
169 #[serde(rename = "add")]
170 EmojiAdded,
171 #[serde(rename = "rename")]
172 EmojiRenamed,
173}
174
175#[skip_serializing_none]
176#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
177pub struct SlackLinkObject {
178 pub domain: String,
179 pub url: Url,
180}