slack_rust/payloads/
interactive.rs

1use crate::block::block_object::TextBlockObject;
2use crate::channels::channel::Channel;
3use crate::chat::message::Message;
4use crate::team::teams::Team;
5use crate::users::user::User;
6use crate::views::view::View;
7use serde::{Deserialize, Serialize};
8use serde_with::skip_serializing_none;
9
10#[skip_serializing_none]
11#[derive(Deserialize, Serialize, Debug, PartialEq)]
12pub struct SlashPayload {
13    pub token: Option<String>,
14    pub team_id: Option<String>,
15    pub team_domain: Option<String>,
16    pub channel_id: Option<String>,
17    pub channel_name: Option<String>,
18    pub user_id: Option<String>,
19    pub user_name: Option<String>,
20    pub command: Option<String>,
21    pub text: Option<String>,
22    pub response_url: Option<String>,
23    pub trigger_id: Option<String>,
24}
25
26#[skip_serializing_none]
27#[derive(Deserialize, Serialize, Debug, PartialEq)]
28pub struct InteractivePayload {
29    #[serde(rename = "type")]
30    pub type_filed: InteractiveEventType,
31    pub team: Option<Team>,
32    pub user: Option<User>,
33    pub api_app_id: Option<String>,
34    pub token: Option<String>,
35    pub container: Option<Container>,
36    pub trigger_id: Option<String>,
37    pub channel: Option<Channel>,
38    pub message: Option<Message>,
39    pub response_url: Option<String>,
40    pub actions: Option<Vec<Action>>,
41    pub view: Option<View>,
42    pub hash: Option<String>,
43    pub block_id: Option<String>,
44    pub action_id: Option<String>,
45    pub value: Option<String>,
46    pub is_enterprise_install: Option<bool>,
47    pub callback_id: Option<String>,
48}
49
50#[derive(Deserialize, Serialize, Debug, PartialEq)]
51#[serde(rename_all = "snake_case")]
52pub enum InteractiveEventType {
53    DialogCancellation,
54    DialogSubmission,
55    DialogSuggestion,
56    InteractionMessage,
57    MessageAction,
58    BlockActions,
59    BlockSuggestion,
60    ViewSubmission,
61    ViewClosed,
62    Shortcut,
63}
64
65#[skip_serializing_none]
66#[derive(Deserialize, Serialize, Debug, PartialEq)]
67pub struct Container {
68    #[serde(rename = "type")]
69    pub type_filed: String,
70    pub message_ts: Option<String>,
71    pub attachment_id: Option<i32>,
72    pub channel_id: Option<String>,
73    pub is_ephemeral: Option<bool>,
74    pub is_app_unfurl: Option<bool>,
75}
76
77#[skip_serializing_none]
78#[derive(Deserialize, Serialize, Debug, PartialEq)]
79pub struct Action {
80    #[serde(rename = "type")]
81    pub type_filed: String,
82    pub action_id: Option<String>,
83    pub block_id: Option<String>,
84    pub text: Option<TextBlockObject>,
85    pub value: Option<String>,
86    pub action_ts: Option<String>,
87}