slack_rust/users/
identity.rs1use crate::error::Error;
2use crate::http_client::{get_slack_url, ResponseMetadata, SlackWebAPIClient};
3use crate::team::teams::Team;
4use crate::users::user::User;
5use serde::{Deserialize, Serialize};
6use serde_with::skip_serializing_none;
7
8#[skip_serializing_none]
9#[derive(Deserialize, Serialize, Debug, Default, PartialEq)]
10pub struct IdentityResponse {
11 pub ok: bool,
12 pub error: Option<String>,
13 pub response_metadata: Option<ResponseMetadata>,
14 pub user: Option<User>,
15 pub team: Option<Team>,
16}
17
18pub async fn identity<T>(client: &T, bot_token: &str) -> Result<IdentityResponse, Error>
19where
20 T: SlackWebAPIClient,
21{
22 let url = get_slack_url("users.identity");
23
24 client.post(&url, bot_token).await.and_then(|result| {
25 serde_json::from_str::<IdentityResponse>(&result).map_err(Error::SerdeJsonError)
26 })
27}
28
29#[cfg(test)]
30mod test {
31 use super::*;
32 use crate::http_client::MockSlackWebAPIClient;
33
34 #[test]
35 fn convert_response() {
36 let response = IdentityResponse {
37 ok: true,
38 user: Some(User {
39 id: Some("Sonny Whether".to_string()),
40 name: Some("U0G9QF9C6".to_string()),
41 ..Default::default()
42 }),
43 team: Some(Team {
44 id: Some("T0G9PQBBK".to_string()),
45 ..Default::default()
46 }),
47 ..Default::default()
48 };
49 let json = r##"{
50 "ok": true,
51 "user": {
52 "id": "Sonny Whether",
53 "name": "U0G9QF9C6"
54 },
55 "team": {
56 "id": "T0G9PQBBK"
57 }
58}"##;
59
60 let j = serde_json::to_string_pretty(&response).unwrap();
61 assert_eq!(json, j);
62
63 let s = serde_json::from_str::<IdentityResponse>(json).unwrap();
64 assert_eq!(response, s);
65 }
66
67 #[async_std::test]
68 async fn test_identity() {
69 let mut mock = MockSlackWebAPIClient::new();
70 mock.expect_post().returning(|_, _| {
71 Ok(r##"{
72 "ok": true,
73 "user": {
74 "id": "Sonny Whether",
75 "name": "U0G9QF9C6"
76 },
77 "team": {
78 "id": "T0G9PQBBK"
79 }
80}"##
81 .to_string())
82 });
83
84 let response = identity(&mock, &"test_token".to_string()).await.unwrap();
85 let expect = IdentityResponse {
86 ok: true,
87 user: Some(User {
88 id: Some("Sonny Whether".to_string()),
89 name: Some("U0G9QF9C6".to_string()),
90 ..Default::default()
91 }),
92 team: Some(Team {
93 id: Some("T0G9PQBBK".to_string()),
94 ..Default::default()
95 }),
96 ..Default::default()
97 };
98
99 assert_eq!(expect, response);
100 }
101}