1use crate::client::GeweHttpClient;
2use gewe_core::{
3 AddLabelRequest, AddLabelResponse, DeleteLabelRequest, GeweError, ListLabelRequest,
4 ListLabelResponse, ModifyLabelMemberRequest,
5};
6use tracing::instrument;
7
8impl GeweHttpClient {
9 #[instrument(skip(self))]
10 pub async fn add_label(&self, req: AddLabelRequest<'_>) -> Result<AddLabelResponse, GeweError> {
11 let env = self
12 .post_api::<_, AddLabelResponse>("gewe/v2/api/label/add", &req)
13 .await?;
14 env.data.ok_or(GeweError::MissingData)
15 }
16
17 #[instrument(skip(self))]
18 pub async fn delete_label(&self, req: DeleteLabelRequest<'_>) -> Result<(), GeweError> {
19 self.post_api::<_, serde_json::Value>("gewe/v2/api/label/delete", &req)
20 .await?;
21 Ok(())
22 }
23
24 #[instrument(skip(self))]
25 pub async fn list_labels(
26 &self,
27 req: ListLabelRequest<'_>,
28 ) -> Result<ListLabelResponse, GeweError> {
29 let env = self
30 .post_api::<_, ListLabelResponse>("gewe/v2/api/label/list", &req)
31 .await?;
32 env.data.ok_or(GeweError::MissingData)
33 }
34
35 #[instrument(skip(self))]
36 pub async fn modify_label_members(
37 &self,
38 req: ModifyLabelMemberRequest<'_>,
39 ) -> Result<(), GeweError> {
40 self.post_api::<_, serde_json::Value>("gewe/v2/api/label/modifyMemberList", &req)
41 .await?;
42 Ok(())
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn test_add_label_request() {
52 let req = AddLabelRequest {
53 app_id: "test_app",
54 label_name: "Friends",
55 };
56 let json = serde_json::to_string(&req).expect("Failed to serialize");
57 assert!(json.contains("appId"));
58 assert!(json.contains("labelName"));
59 }
60
61 #[test]
62 fn test_delete_label_request() {
63 let req = DeleteLabelRequest {
64 app_id: "test_app",
65 label_ids: "1,2,3",
66 };
67 let json = serde_json::to_string(&req).expect("Failed to serialize");
68 assert!(json.contains("appId"));
69 assert!(json.contains("labelIds"));
70 }
71
72 #[test]
73 fn test_list_labels_request() {
74 let req = ListLabelRequest { app_id: "test_app" };
75 let json = serde_json::to_string(&req).expect("Failed to serialize");
76 assert!(json.contains("appId"));
77 }
78
79 #[test]
80 fn test_modify_label_members_request() {
81 let req = ModifyLabelMemberRequest {
82 app_id: "test_app",
83 label_ids: "1,2",
84 wx_ids: vec!["wxid1", "wxid2"],
85 };
86 let json = serde_json::to_string(&req).expect("Failed to serialize");
87 assert!(json.contains("appId"));
88 assert!(json.contains("labelIds"));
89 assert!(json.contains("wxIds"));
90 }
91}