slack_morphism_models/events/
push.rs

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