slack_morphism_models/socket_mode/
mod.rs

1use rsb_derive::Builder;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5use crate::common::*;
6use crate::events::{
7    SlackCommandEvent, SlackCommandEventResponse, SlackInteractionEvent, SlackPushEventCallback,
8};
9use rvstruct::*;
10
11#[allow(clippy::large_enum_variant)]
12#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
13#[serde(tag = "type")]
14pub enum SlackSocketModeEvent {
15    #[serde(rename = "hello")]
16    Hello(SlackSocketModeHelloEvent),
17    #[serde(rename = "disconnect")]
18    Disconnect(SlackSocketModeDisconnectEvent),
19    #[serde(rename = "interactive")]
20    Interactive(SlackSocketModeInteractiveEvent),
21    #[serde(rename = "events_api")]
22    EventsApi(SlackSocketModeEventsApiEvent),
23    #[serde(rename = "slash_commands")]
24    SlashCommands(SlackSocketModeCommandEvent),
25}
26
27#[skip_serializing_none]
28#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
29pub struct SlackSocketModeHelloEvent {
30    pub connection_info: SlackSocketModeConnectionInfo,
31    pub num_connections: u32,
32    pub debug_info: SlackSocketModeDebugInfo,
33}
34
35#[skip_serializing_none]
36#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
37pub struct SlackSocketModeConnectionInfo {
38    pub app_id: SlackAppId,
39}
40
41#[skip_serializing_none]
42#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
43pub struct SlackSocketModeDebugInfo {
44    pub host: String,
45    pub started: Option<String>,
46    pub build_number: Option<u64>,
47    pub approximate_connection_time: Option<u64>,
48}
49
50#[skip_serializing_none]
51#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
52pub struct SlackSocketModeDisconnectEvent {
53    pub reason: String,
54    pub debug_info: SlackSocketModeDebugInfo,
55}
56
57#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
58pub struct SlackSocketModeEnvelopeId(pub String);
59
60#[skip_serializing_none]
61#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
62pub struct SlackSocketModeEventEnvelopeParams {
63    pub envelope_id: SlackSocketModeEnvelopeId,
64    pub accepts_response_payload: bool,
65}
66
67#[skip_serializing_none]
68#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
69pub struct SlackSocketModeEventCommonAcknowledge {
70    pub envelope_id: SlackSocketModeEnvelopeId,
71}
72
73#[skip_serializing_none]
74#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
75pub struct SlackSocketModeInteractiveEvent {
76    #[serde(flatten)]
77    pub envelope_params: SlackSocketModeEventEnvelopeParams,
78    pub payload: SlackInteractionEvent,
79}
80
81#[skip_serializing_none]
82#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
83pub struct SlackSocketModeEventsApiEvent {
84    #[serde(flatten)]
85    pub envelope_params: SlackSocketModeEventEnvelopeParams,
86    pub payload: SlackPushEventCallback,
87}
88
89#[skip_serializing_none]
90#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
91pub struct SlackSocketModeCommandEvent {
92    #[serde(flatten)]
93    pub envelope_params: SlackSocketModeEventEnvelopeParams,
94    pub payload: SlackCommandEvent,
95}
96
97#[skip_serializing_none]
98#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
99pub struct SlackSocketModeCommandEventAck {
100    #[serde(flatten)]
101    pub envelope_ack_params: SlackSocketModeEventCommonAcknowledge,
102    pub payload: Option<SlackCommandEventResponse>,
103}