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