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 blocks: Option<Vec<SlackBlock>>,
36 pub attachments: Option<Vec<SlackMessageAttachment>>,
37 pub upload: Option<bool>,
38 pub files: Option<Vec<SlackFile>>,
39 pub reactions: Option<Vec<SlackReaction>>,
40 pub metadata: Option<SlackMessageMetadata>,
41}
42
43#[skip_serializing_none]
44#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
45pub struct SlackMessageSender {
46 pub user: Option<SlackUserId>,
47 pub bot_id: Option<SlackBotId>,
48 pub username: Option<String>,
49 pub display_as_bot: Option<bool>,
50 pub user_profile: Option<SlackUserProfile>,
51 pub bot_profile: Option<SlackBotInfo>,
52}
53
54#[skip_serializing_none]
55#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
56pub struct SlackParentMessageParams {
57 pub reply_count: Option<usize>,
58 pub reply_users_count: Option<usize>,
59 pub latest_reply: Option<SlackTs>,
60 pub reply_users: Option<Vec<SlackUserId>>,
61 pub subscribed: Option<bool>,
62 pub last_read: Option<SlackTs>,
63}
64
65#[skip_serializing_none]
66#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
67pub struct SlackMessage {
68 #[serde(flatten)]
69 pub origin: SlackMessageOrigin,
70 #[serde(flatten)]
71 pub content: SlackMessageContent,
72 #[serde(flatten)]
73 pub sender: SlackMessageSender,
74 #[serde(flatten)]
75 pub parent: SlackParentMessageParams,
76}
77
78#[skip_serializing_none]
79#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
80pub struct SlackHistoryMessage {
81 #[serde(flatten)]
82 pub origin: SlackMessageOrigin,
83 #[serde(flatten)]
84 pub content: SlackMessageContent,
85 #[serde(flatten)]
86 pub sender: SlackMessageSender,
87 #[serde(flatten)]
88 pub parent: SlackParentMessageParams,
89 pub subtype: Option<SlackMessageEventType>,
90 pub edited: Option<SlackMessageEdited>,
91}
92
93#[skip_serializing_none]
94#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
95pub struct SlackUpdatedMessage {
96 #[serde(flatten)]
97 pub sender: SlackMessageSender,
98 #[serde(flatten)]
99 pub content: SlackMessageContent,
100 pub edited: Option<SlackMessageEdited>,
101}
102
103#[skip_serializing_none]
104#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
105pub struct SlackMessageEdited {
106 pub user: SlackUserId,
107 pub ts: SlackTs,
108}
109
110#[skip_serializing_none]
111#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
112pub enum SlackMessageResponseType {
113 #[serde(rename = "in_channel")]
114 InChannel,
115 #[serde(rename = "ephemeral")]
116 Ephemeral,
117}
118
119#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
120pub struct SlackMessageAttachmentId(i64);
121
122#[skip_serializing_none]
125#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
126pub struct SlackMessageAttachment {
127 pub id: Option<SlackMessageAttachmentId>,
128 pub color: Option<String>,
129 pub fallback: Option<String>,
130 pub title: Option<String>,
131 pub fields: Option<Vec<SlackMessageAttachmentFieldObject>>,
132 pub mrkdwn_in: Option<Vec<String>>,
133 pub text: Option<String>,
134 pub blocks: Option<Vec<SlackBlock>>,
135}
136
137#[skip_serializing_none]
140#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
141pub struct SlackMessageAttachmentFieldObject {
142 pub title: Option<String>,
143 pub value: Option<String>,
144 pub short: Option<bool>,
145}