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