gewe_http/video_account/
message.rs1use 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}