slack_morphism/api/
reactions.rs

1//!
2//! Support for Slack Reactions API methods
3//!
4
5use 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    ///
21    /// https://api.slack.com/methods/reactions.get
22    ///
23    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    ///
42    /// https://api.slack.com/methods/reactions.add
43    ///
44    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    ///
54    /// https://api.slack.com/methods/reactions.remove
55    ///
56    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 {}