slack_morphism_models/messages/
mod.rs1use 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#[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#[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}