slack_morphism/api/
reactions.rs1use rsb_derive::Builder;
6use rvstruct::ValueStruct;
7use serde::{Deserialize, Serialize};
8use serde_with::skip_serializing_none;
9use url::Url;
10
11use crate::models::*;
12use crate::ratectl::*;
13use crate::SlackClientSession;
14use crate::{ClientResult, SlackClientHttpConnector};
15
16impl<'a, SCHC> SlackClientSession<'a, SCHC>
17where
18 SCHC: SlackClientHttpConnector + Send,
19{
20 pub async fn reactions_get(
24 &self,
25 req: &SlackApiReactionsGetRequest,
26 ) -> ClientResult<SlackApiReactionsGetResponse> {
27 self.http_session_api
28 .http_get(
29 "reactions.get",
30 &vec![
31 ("channel", req.channel.as_ref().map(|x| x.value())),
32 ("file", req.file.as_ref().map(|x| x.value())),
33 ("full", req.full.map(|v| v.to_string()).as_ref()),
34 ("timestamp", req.timestamp.as_ref().map(|x| x.value())),
35 ],
36 Some(&SLACK_TIER3_METHOD_CONFIG),
37 )
38 .await
39 }
40
41 pub async fn reactions_add(
45 &self,
46 req: &SlackApiReactionsAddRequest,
47 ) -> ClientResult<SlackApiReactionsAddResponse> {
48 self.http_session_api
49 .http_post("reactions.add", req, Some(&SLACK_TIER3_METHOD_CONFIG))
50 .await
51 }
52
53 pub async fn reactions_remove(
57 &self,
58 req: &SlackApiReactionsRemoveRequest,
59 ) -> ClientResult<SlackApiReactionsRemoveResponse> {
60 self.http_session_api
61 .http_post("reactions.remove", req, Some(&SLACK_TIER2_METHOD_CONFIG))
62 .await
63 }
64}
65
66#[skip_serializing_none]
67#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
68pub struct SlackApiReactionsGetRequest {
69 pub channel: Option<SlackChannelId>,
70 pub file: Option<SlackFileId>,
71 pub full: Option<bool>,
72 pub timestamp: Option<SlackTs>,
73}
74
75#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
76pub struct SlackApiReactionsGetMessageResponse {
77 pub message: SlackHistoryMessage,
78 pub permalink: Option<Url>,
79}
80
81#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
82#[serde(rename_all = "lowercase")]
83#[serde(tag = "type")]
84#[allow(clippy::large_enum_variant)]
85pub enum SlackApiReactionsGetResponse {
86 Message(SlackApiReactionsGetMessageResponse),
87 File(SlackFile),
88}
89
90#[skip_serializing_none]
91#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
92pub struct SlackApiReactionsAddRequest {
93 pub channel: SlackChannelId,
94 pub name: SlackReactionName,
95 pub timestamp: SlackTs,
96}
97
98#[skip_serializing_none]
99#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
100pub struct SlackApiReactionsAddResponse {}
101
102#[skip_serializing_none]
103#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
104pub struct SlackApiReactionsRemoveRequest {
105 pub name: SlackReactionName,
106 pub channel: Option<SlackChannelId>,
107 pub file: Option<SlackFileId>,
108 pub full: Option<bool>,
109 pub timestamp: Option<SlackTs>,
110}
111
112#[skip_serializing_none]
113#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
114pub struct SlackApiReactionsRemoveResponse {}