slack_morphism_models/messages/
mod.rs

1use crate::blocks::*;
2use crate::common::*;
3use crate::events::SlackMessageEventType;
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 SlackMessageContent {
26    pub text: Option<String>,
27    pub blocks: Option<Vec<SlackBlock>>,
28    pub attachments: Option<Vec<SlackMessageAttachment>>,
29    pub upload: Option<bool>,
30    pub files: Option<Vec<SlackFile>>,
31    pub reactions: Option<Vec<SlackReaction>>,
32}
33
34#[skip_serializing_none]
35#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
36pub struct SlackMessageSender {
37    pub user: Option<SlackUserId>,
38    pub bot_id: Option<SlackBotId>,
39    pub username: Option<String>,
40    pub display_as_bot: Option<bool>,
41}
42
43#[skip_serializing_none]
44#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
45pub struct SlackParentMessageParams {
46    pub reply_count: Option<usize>,
47    pub reply_users_count: Option<usize>,
48    pub latest_reply: Option<SlackTs>,
49    pub reply_users: Option<Vec<SlackUserId>>,
50}
51
52#[skip_serializing_none]
53#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
54pub struct SlackMessage {
55    #[serde(flatten)]
56    pub origin: SlackMessageOrigin,
57    #[serde(flatten)]
58    pub content: SlackMessageContent,
59    #[serde(flatten)]
60    pub parent: SlackParentMessageParams,
61}
62
63#[skip_serializing_none]
64#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
65pub struct SlackHistoryMessage {
66    #[serde(flatten)]
67    pub origin: SlackMessageOrigin,
68    #[serde(flatten)]
69    pub content: SlackMessageContent,
70    #[serde(flatten)]
71    pub sender: SlackMessageSender,
72    #[serde(flatten)]
73    pub parent: SlackParentMessageParams,
74    pub subtype: Option<SlackMessageEventType>,
75}
76
77#[skip_serializing_none]
78#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
79pub struct SlackUpdatedMessage {
80    #[serde(flatten)]
81    pub sender: SlackMessageSender,
82    #[serde(flatten)]
83    pub content: SlackMessageContent,
84    pub edited: Option<SlackMessageEdited>,
85}
86
87#[skip_serializing_none]
88#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
89pub struct SlackMessageEdited {
90    pub user: SlackUserId,
91    pub ts: SlackTs,
92}
93
94#[skip_serializing_none]
95#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
96pub enum SlackMessageResponseType {
97    #[serde(rename = "in_channel")]
98    InChannel,
99    #[serde(rename = "ephemeral")]
100    Ephemeral,
101}
102
103// This model is not well typed since Slack message attachments are deprecated
104// Please avoid using this if you can
105#[skip_serializing_none]
106#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
107pub struct SlackMessageAttachment {
108    pub id: Option<i64>,
109    pub color: Option<String>,
110    pub fallback: Option<String>,
111    pub title: Option<String>,
112    pub fields: Option<Vec<SlackMessageAttachmentFieldObject>>,
113    pub mrkdwn_in: Option<Vec<String>>,
114}
115
116// This model is not well typed since Slack message attachments are deprecated
117// Please avoid using this if you can
118#[skip_serializing_none]
119#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
120pub struct SlackMessageAttachmentFieldObject {
121    pub title: Option<String>,
122    pub value: Option<String>,
123    pub short: Option<bool>,
124}