slack_morphism/api/
emoji.rs1use 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 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}