wecom_rs/client/contact/user/
user.rs1use super::*;
2use crate::{
3 client::{common::model::Response, Client, BASE_URL},
4 error::Result,
5};
6use async_trait::async_trait;
7use reqwest::Method;
8
9#[async_trait]
10impl UserManager for Client {
11 async fn user_create(&self, params: ParamsCreateUser) -> Result<()> {
13 let token = self.access_token().await?;
14 self.request::<Response<()>>(
15 Method::POST,
16 &format!("{BASE_URL}/user/create?access_token={token}"),
17 Some(serde_json::to_value(¶ms)?),
18 )
19 .await?;
20
21 Ok(())
22 }
23
24 async fn user_get(&self, user_id: &str) -> Result<User> {
26 let token = self.access_token().await?;
27 let resp = self
28 .request::<Response<User>>(
29 Method::GET,
30 &format!("{BASE_URL}/user/get?access_token={token}&userid={user_id}"),
31 None,
32 )
33 .await?;
34
35 Ok(resp.data.unwrap())
36 }
37 async fn user_update(&self, params: ParamsUpdateUser) -> Result<()> {
38 if params.is_empty() {
39 return Err(crate::error::Error::EmptyFiledsUpdate);
40 }
41 let token = self.access_token().await?;
42 self.request::<Response<()>>(
43 Method::POST,
44 &format!("{BASE_URL}/user/update?access_token={token}"),
45 Some(serde_json::to_value(params)?),
46 )
47 .await?;
48
49 Ok(())
50 }
51
52 async fn user_delete(&self, user_id: &str) -> Result<()> {
54 let token = self.access_token().await?;
55 self.request::<Response<()>>(
56 Method::GET,
57 &format!("{BASE_URL}/user/delete?access_token={token}&userid={user_id}"),
58 None,
59 )
60 .await?;
61
62 Ok(())
63 }
64
65 async fn user_batch_delete(&self, userids: &[&str]) -> Result<()> {
67 let token = self.access_token().await?;
68 self.request::<Response<()>>(
69 Method::POST,
70 &format!("{BASE_URL}/user/batchdelete?access_token={token}"),
71 Some(serde_json::json!({ "useridlist": userids })),
72 )
73 .await?;
74
75 Ok(())
76 }
77
78 async fn user_list(&self, department_id: u64) -> Result<UserList> {
80 let token = self.access_token().await?;
81 let resp = self
82 .request::<Response<UserList>>(
83 Method::GET,
84 &format!("{BASE_URL}/user/list?access_token={token}&department_id={department_id}"),
85 None,
86 )
87 .await?;
88
89 Ok(resp.data.unwrap())
90 }
91
92 async fn userid_get(&self, mobile: &str) -> Result<String> {
94 let token = self.access_token().await?;
95 let resp = self
96 .request::<Response<GetUserIdResponse>>(
97 Method::POST,
98 &format!("{BASE_URL}/user/getuserid?access_token={token}"),
99 Some(serde_json::json!({ "mobile": mobile })),
100 )
101 .await?;
102
103 Ok(resp.data.unwrap().userid)
104 }
105}
106
107use serde::{Deserialize, Serialize};
108#[derive(Debug, Deserialize, Serialize, Default)]
109struct GetUserIdResponse {
110 userid: String,
111}