slack_morphism/api/
emoji.rs

1//!
2//! Support for Slack Team API methods
3//!
4
5use std::collections::HashMap;
6
7use rsb_derive::Builder;
8use serde::{Deserialize, Serialize};
9use serde_with::skip_serializing_none;
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/emoji.list
22    ///
23    pub async fn emoji_list(&self) -> ClientResult<SlackApiEmojiListResponse> {
24        self.http_session_api
25            .http_get(
26                "emoji.list",
27                &crate::client::SLACK_HTTP_EMPTY_GET_PARAMS.clone(),
28                Some(&SLACK_TIER2_METHOD_CONFIG),
29            )
30            .await
31    }
32}
33
34#[skip_serializing_none]
35#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
36pub struct SlackApiEmojiListResponse {
37    pub emoji: HashMap<SlackEmojiName, SlackEmojiRef>,
38}
39
40#[cfg(test)]
41mod test {
42    use super::*;
43
44    #[test]
45    fn test_slack_api_emoji_list_response() {
46        let payload = include_str!("./fixtures/slack_api_emoji_list_response.json");
47        let model: SlackApiEmojiListResponse = serde_json::from_str(payload).unwrap();
48
49        assert_eq!(model.emoji.len(), 1);
50        assert!(model
51            .emoji
52            .contains_key(&SlackEmojiName::new("test".to_string())));
53        let test_emoji = model
54            .emoji
55            .get(&SlackEmojiName::new("test".to_string()))
56            .unwrap();
57        match test_emoji {
58            SlackEmojiRef::Url(url) => {
59                assert_eq!(url.as_str(), "https://emoji.slack-edge.com/test_emoji.png")
60            }
61            _ => panic!("unexpected emoji type"),
62        }
63    }
64}