slack_rust/payloads/
interactive.rs1use 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}