slack_morphism_models/socket_mode/
mod.rs1use 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}