gewe_http/video_account/
message.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    ContactListEntry, ContactListRequest, GeweError, MentionListRequest, MentionListResponse,
4    PostPrivateLetterImgRequest, PostPrivateLetterRequest, PrivateLetterResponse,
5    SendFinderMsgRequest, SyncPrivateLetterMsgRequest, SyncPrivateLetterMsgResponse,
6};
7use tracing::instrument;
8
9impl GeweHttpClient {
10    #[instrument(skip(self))]
11    pub async fn send_finder_msg(&self, req: SendFinderMsgRequest<'_>) -> Result<(), GeweError> {
12        self.post_api::<_, serde_json::Value>("gewe/v2/api/message/sendFinderMsg", &req)
13            .await?;
14        Ok(())
15    }
16
17    #[instrument(skip(self))]
18    pub async fn post_private_letter(
19        &self,
20        req: PostPrivateLetterRequest<'_>,
21    ) -> Result<PrivateLetterResponse, GeweError> {
22        let env = self
23            .post_api::<_, PrivateLetterResponse>("gewe/v2/api/finder/postPrivateLetter", &req)
24            .await?;
25        env.data.ok_or(GeweError::MissingData)
26    }
27
28    #[instrument(skip(self))]
29    pub async fn post_private_letter_img(
30        &self,
31        req: PostPrivateLetterImgRequest<'_>,
32    ) -> Result<PrivateLetterResponse, GeweError> {
33        let env = self
34            .post_api::<_, PrivateLetterResponse>("gewe/v2/api/finder/postPrivateLetterImg", &req)
35            .await?;
36        env.data.ok_or(GeweError::MissingData)
37    }
38
39    #[instrument(skip(self))]
40    pub async fn sync_private_letter_msg(
41        &self,
42        req: SyncPrivateLetterMsgRequest<'_>,
43    ) -> Result<SyncPrivateLetterMsgResponse, GeweError> {
44        let env = self
45            .post_api::<_, SyncPrivateLetterMsgResponse>(
46                "gewe/v2/api/finder/syncPrivateLetterMsg",
47                &req,
48            )
49            .await?;
50        env.data.ok_or(GeweError::MissingData)
51    }
52
53    #[instrument(skip(self))]
54    pub async fn mention_list(
55        &self,
56        req: MentionListRequest<'_>,
57    ) -> Result<MentionListResponse, GeweError> {
58        let env = self
59            .post_api::<_, MentionListResponse>("gewe/v2/api/finder/mentionList", &req)
60            .await?;
61        env.data.ok_or(GeweError::MissingData)
62    }
63
64    #[instrument(skip(self))]
65    pub async fn contact_list(
66        &self,
67        req: ContactListRequest<'_>,
68    ) -> Result<Vec<ContactListEntry>, GeweError> {
69        let env = self
70            .post_api::<_, Vec<ContactListEntry>>("gewe/v2/api/finder/contactList", &req)
71            .await?;
72        env.data.ok_or(GeweError::MissingData)
73    }
74}
75
76#[cfg(test)]
77mod tests {
78    use super::*;
79
80    #[test]
81    fn test_send_finder_msg_request() {
82        let req = SendFinderMsgRequest {
83            app_id: "test_app",
84            to_wxid: "recipient_wxid",
85            id: 123456,
86            username: "username",
87            nickname: "nickname",
88            head_url: "https://example.com/head.jpg",
89            nonce_id: "nonce_123",
90            media_type: "video",
91            width: "720",
92            height: "480",
93            url: "https://example.com/video.mp4",
94            thumb_url: "https://example.com/thumb.jpg",
95            thumb_url_token: "token",
96            description: "Video description",
97            video_play_len: "120",
98        };
99        let json = serde_json::to_string(&req).expect("Failed to serialize");
100        assert!(json.contains("appId"));
101        assert!(json.contains("toWxid"));
102    }
103
104    #[test]
105    fn test_post_private_letter_request() {
106        let req = PostPrivateLetterRequest {
107            app_id: "test_app",
108            content: "Private message",
109            to_user_name: "recipient",
110            my_user_name: "my_user",
111            msg_session_id: "session_123",
112        };
113        let json = serde_json::to_string(&req).expect("Failed to serialize");
114        assert!(json.contains("appId"));
115        assert!(json.contains("content"));
116    }
117
118    #[test]
119    fn test_sync_private_letter_msg_request() {
120        let req = SyncPrivateLetterMsgRequest {
121            app_id: "test_app",
122            key_buff: None,
123        };
124        let json = serde_json::to_string(&req).expect("Failed to serialize");
125        assert!(json.contains("appId"));
126    }
127
128    #[test]
129    fn test_contact_list_request() {
130        let req = ContactListRequest {
131            app_id: "test_app",
132            my_user_name: "my_user",
133            my_role_type: 1,
134            query_info: "query",
135        };
136        let json = serde_json::to_string(&req).expect("Failed to serialize");
137        assert!(json.contains("appId"));
138        assert!(json.contains("myUserName"));
139    }
140}