slack_morphism/models/messages/
mod.rs

1use crate::blocks::*;
2use crate::events::SlackMessageEventType;
3use crate::*;
4use rsb_derive::Builder;
5use serde::{Deserialize, Serialize};
6use serde_with::skip_serializing_none;
7
8mod templates;
9
10use crate::SlackFile;
11pub use templates::*;
12
13#[skip_serializing_none]
14#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
15pub struct SlackMessageOrigin {
16    pub ts: SlackTs,
17    pub channel: Option<SlackChannelId>,
18    pub channel_type: Option<SlackChannelType>,
19    pub thread_ts: Option<SlackTs>,
20    pub client_msg_id: Option<SlackClientMessageId>,
21}
22
23#[skip_serializing_none]
24#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
25pub struct SlackMessageMetadata {
26    pub event_type: String,
27    pub event_payload: Option<std::collections::HashMap<String, String>>,
28}
29
30#[skip_serializing_none]
31#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
32pub struct SlackMessageContent {
33    pub text: Option<String>,
34    pub blocks: Option<Vec<SlackBlock>>,
35    pub attachments: Option<Vec<SlackMessageAttachment>>,
36    pub upload: Option<bool>,
37    pub files: Option<Vec<SlackFile>>,
38    pub reactions: Option<Vec<SlackReaction>>,
39    pub metadata: Option<SlackMessageMetadata>,
40}
41
42#[skip_serializing_none]
43#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
44pub struct SlackMessageSender {
45    pub user: Option<SlackUserId>,
46    pub bot_id: Option<SlackBotId>,
47    pub username: Option<String>,
48    pub display_as_bot: Option<bool>,
49    pub user_profile: Option<SlackUserProfile>,
50    pub bot_profile: Option<SlackBotInfo>,
51}
52
53#[skip_serializing_none]
54#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
55pub struct SlackParentMessageParams {
56    pub reply_count: Option<usize>,
57    pub reply_users_count: Option<usize>,
58    pub latest_reply: Option<SlackTs>,
59    pub reply_users: Option<Vec<SlackUserId>>,
60    pub subscribed: Option<bool>,
61    pub last_read: Option<SlackTs>,
62}
63
64#[skip_serializing_none]
65#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
66pub struct SlackMessage {
67    #[serde(flatten)]
68    pub origin: SlackMessageOrigin,
69    #[serde(flatten)]
70    pub content: SlackMessageContent,
71    #[serde(flatten)]
72    pub sender: SlackMessageSender,
73    #[serde(flatten)]
74    pub parent: SlackParentMessageParams,
75}
76
77#[skip_serializing_none]
78#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
79pub struct SlackHistoryMessage {
80    #[serde(flatten)]
81    pub origin: SlackMessageOrigin,
82    #[serde(flatten)]
83    pub content: SlackMessageContent,
84    #[serde(flatten)]
85    pub sender: SlackMessageSender,
86    #[serde(flatten)]
87    pub parent: SlackParentMessageParams,
88    pub subtype: Option<SlackMessageEventType>,
89    pub edited: Option<SlackMessageEdited>,
90}
91
92#[skip_serializing_none]
93#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
94pub struct SlackUpdatedMessage {
95    #[serde(flatten)]
96    pub sender: SlackMessageSender,
97    #[serde(flatten)]
98    pub content: SlackMessageContent,
99    pub edited: Option<SlackMessageEdited>,
100}
101
102#[skip_serializing_none]
103#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
104pub struct SlackMessageEdited {
105    pub user: SlackUserId,
106    pub ts: SlackTs,
107}
108
109#[skip_serializing_none]
110#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
111pub enum SlackMessageResponseType {
112    #[serde(rename = "in_channel")]
113    InChannel,
114    #[serde(rename = "ephemeral")]
115    Ephemeral,
116}
117
118// This model is not well typed since Slack message attachments are deprecated
119// Please avoid using this if you can
120#[skip_serializing_none]
121#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
122pub struct SlackMessageAttachment {
123    pub id: Option<i64>,
124    pub color: Option<String>,
125    pub fallback: Option<String>,
126    pub title: Option<String>,
127    pub fields: Option<Vec<SlackMessageAttachmentFieldObject>>,
128    pub mrkdwn_in: Option<Vec<String>>,
129    pub text: Option<String>,
130    pub blocks: Option<Vec<SlackBlock>>,
131}
132
133// This model is not well typed since Slack message attachments are deprecated
134// Please avoid using this if you can
135#[skip_serializing_none]
136#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
137pub struct SlackMessageAttachmentFieldObject {
138    pub title: Option<String>,
139    pub value: Option<String>,
140    pub short: Option<bool>,
141}