1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[serde(rename_all = "camelCase")]
5pub struct InviteMemberRequest<'a> {
6 #[serde(rename = "appId")]
7 pub app_id: &'a str,
8 #[serde(rename = "chatroomId")]
9 pub chatroom_id: &'a str,
10 pub reason: &'a str,
11 pub wxids: Vec<&'a str>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15#[serde(rename_all = "camelCase")]
16pub struct RemoveMemberRequest<'a> {
17 #[serde(rename = "appId")]
18 pub app_id: &'a str,
19 #[serde(rename = "chatroomId")]
20 pub chatroom_id: &'a str,
21 pub wxids: Vec<&'a str>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct JoinRoomUsingQrCodeRequest<'a> {
27 #[serde(rename = "appId")]
28 pub app_id: &'a str,
29 #[serde(rename = "qrUuid")]
30 pub qr_uuid: &'a str,
31 #[serde(rename = "chatroomName")]
32 pub chatroom_name: &'a str,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct AgreeJoinRoomRequest<'a> {
38 #[serde(rename = "appId")]
39 pub app_id: &'a str,
40 #[serde(rename = "msgId")]
41 pub msg_id: &'a str,
42 #[serde(rename = "newMsgId")]
43 pub new_msg_id: &'a str,
44 #[serde(rename = "createTime")]
45 pub create_time: &'a str,
46 #[serde(rename = "fromUsername")]
47 pub from_username: &'a str,
48 #[serde(rename = "toUsername")]
49 pub to_username: &'a str,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct RoomAccessApplyCheckApproveRequest<'a> {
55 #[serde(rename = "appId")]
56 pub app_id: &'a str,
57 #[serde(rename = "chatroomId")]
58 pub chatroom_id: &'a str,
59 pub wxid: &'a str,
60 pub ticket: &'a str,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct InviteAddEnterRoomRequest<'a> {
66 #[serde(rename = "appId")]
67 pub app_id: &'a str,
68 #[serde(rename = "chatroomId")]
69 pub chatroom_id: &'a str,
70 #[serde(rename = "expId")]
71 pub exp_id: &'a str,
72 pub wxids: Vec<&'a str>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct AddGroupMemberAsFriendRequest<'a> {
78 #[serde(rename = "appId")]
79 pub app_id: &'a str,
80 #[serde(rename = "chatroomId")]
81 pub chatroom_id: &'a str,
82 #[serde(rename = "wxid")]
83 pub wxid: &'a str,
84 pub content: &'a str,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct GetChatroomMemberListRequest<'a> {
90 #[serde(rename = "appId")]
91 pub app_id: &'a str,
92 #[serde(rename = "chatroomId")]
93 pub chatroom_id: &'a str,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize, Default)]
97#[serde(rename_all = "camelCase")]
98pub struct GetChatroomMemberListResponse {
99 #[serde(rename = "chatRoomOwner")]
100 pub chat_room_owner: String,
101 #[serde(rename = "chatroomMembers")]
102 pub chatroom_members: Vec<ChatroomMember>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize, Default)]
106#[serde(rename_all = "camelCase")]
107pub struct ChatroomMember {
108 pub wxid: String,
109 #[serde(rename = "inviterUserName")]
110 pub inviter_user_name: String,
111 #[serde(rename = "bigHeadImgUrl")]
112 pub big_head_img_url: String,
113 #[serde(rename = "smallHeadImgUrl")]
114 pub small_head_img_url: String,
115 #[serde(rename = "inviteTicket")]
116 pub invite_ticket: String,
117 #[serde(rename = "memberFlag")]
118 pub member_flag: i64,
119 #[serde(rename = "nickName")]
120 pub nick_name: String,
121 #[serde(rename = "remarkName")]
122 pub remark_name: String,
123 pub sex: i64,
124 #[serde(rename = "userName")]
125 pub user_name: String,
126 #[serde(rename = "displayName")]
127 pub display_name: String,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct GetChatroomMemberDetailRequest<'a> {
133 #[serde(rename = "appId")]
134 pub app_id: &'a str,
135 #[serde(rename = "chatroomId")]
136 pub chatroom_id: &'a str,
137 #[serde(rename = "wxid")]
138 pub wxid: &'a str,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize, Default)]
142#[serde(rename_all = "camelCase")]
143pub struct GetChatroomMemberDetailResponse {
144 pub wxid: String,
145 #[serde(rename = "nickName")]
146 pub nick_name: String,
147 #[serde(rename = "remarkName")]
148 pub remark_name: String,
149 pub sex: i64,
150 pub country: String,
151 pub province: String,
152 pub city: String,
153 pub signature: String,
154 #[serde(rename = "bigHeadImgUrl")]
155 pub big_head_img_url: String,
156 #[serde(rename = "smallHeadImgUrl")]
157 pub small_head_img_url: String,
158 #[serde(rename = "userName")]
159 pub user_name: String,
160 #[serde(rename = "displayName")]
161 pub display_name: String,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
165#[serde(rename_all = "camelCase")]
166pub struct GetChatroomInfoRequest<'a> {
167 #[serde(rename = "appId")]
168 pub app_id: &'a str,
169 #[serde(rename = "chatroomId")]
170 pub chatroom_id: &'a str,
171}
172
173#[derive(Debug, Clone, Serialize, Deserialize, Default)]
174#[serde(rename_all = "camelCase")]
175pub struct GetChatroomInfoResponse {
176 #[serde(rename = "chatroomId")]
177 pub chatroom_id: String,
178 #[serde(rename = "nickName")]
179 pub nick_name: String,
180 #[serde(rename = "pyInitial")]
181 pub py_initial: String,
182 #[serde(rename = "quanPin")]
183 pub quan_pin: String,
184 pub sex: i64,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub remark: Option<String>,
187 #[serde(rename = "remarkPyInitial")]
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub remark_py_initial: Option<String>,
190 #[serde(rename = "remarkQuanPin")]
191 #[serde(skip_serializing_if = "Option::is_none")]
192 pub remark_quan_pin: Option<String>,
193 #[serde(rename = "chatRoomNotify")]
194 pub chat_room_notify: i64,
195 #[serde(rename = "chatRoomOwner")]
196 pub chat_room_owner: String,
197 #[serde(rename = "smallHeadImgUrl")]
198 pub small_head_img_url: String,
199 #[serde(rename = "memberList")]
200 pub member_list: Vec<GetChatroomInfoMember>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize, Default)]
204#[serde(rename_all = "camelCase")]
205pub struct GetChatroomInfoMember {
206 pub wxid: String,
207 #[serde(rename = "nickName")]
208 pub nick_name: String,
209 #[serde(rename = "inviterUserName", skip_serializing_if = "Option::is_none")]
210 pub inviter_user_name: Option<String>,
211 #[serde(rename = "memberFlag")]
212 pub member_flag: i64,
213 #[serde(rename = "displayName", skip_serializing_if = "Option::is_none")]
214 pub display_name: Option<String>,
215 #[serde(rename = "bigHeadImgUrl", skip_serializing_if = "Option::is_none")]
216 pub big_head_img_url: Option<String>,
217 #[serde(rename = "smallHeadImgUrl", skip_serializing_if = "Option::is_none")]
218 pub small_head_img_url: Option<String>,
219}
220
221pub type SimpleGroupResponse = ();
222
223#[cfg(test)]
224mod tests {
225 use super::*;
226
227 #[test]
228 fn test_chatroom_member_default() {
229 let member = ChatroomMember::default();
230 assert_eq!(member.wxid, "");
231 assert_eq!(member.nick_name, "");
232 assert_eq!(member.sex, 0);
233 }
234
235 #[test]
236 fn test_chatroom_member_deserialization() {
237 let json = r#"{
238 "wxid": "wxid_test",
239 "inviterUserName": "inviter_wxid",
240 "bigHeadImgUrl": "http://example.com/big.jpg",
241 "smallHeadImgUrl": "http://example.com/small.jpg",
242 "inviteTicket": "ticket123",
243 "memberFlag": 1,
244 "nickName": "TestUser",
245 "remarkName": "Remark",
246 "sex": 1,
247 "userName": "user_test",
248 "displayName": "Display Name"
249 }"#;
250 let member: ChatroomMember = serde_json::from_str(json).unwrap();
251 assert_eq!(member.wxid, "wxid_test");
252 assert_eq!(member.nick_name, "TestUser");
253 assert_eq!(member.sex, 1);
254 assert_eq!(member.display_name, "Display Name");
255 }
256
257 #[test]
258 fn test_get_chatroom_member_list_response_default() {
259 let resp = GetChatroomMemberListResponse::default();
260 assert_eq!(resp.chat_room_owner, "");
261 assert!(resp.chatroom_members.is_empty());
262 }
263
264 #[test]
265 fn test_get_chatroom_member_detail_response_default() {
266 let resp = GetChatroomMemberDetailResponse::default();
267 assert_eq!(resp.wxid, "");
268 assert_eq!(resp.nick_name, "");
269 assert_eq!(resp.country, "");
270 }
271
272 #[test]
273 fn test_get_chatroom_info_response_default() {
274 let resp = GetChatroomInfoResponse::default();
275 assert_eq!(resp.chatroom_id, "");
276 assert_eq!(resp.nick_name, "");
277 assert!(resp.member_list.is_empty());
278 }
279
280 #[test]
281 fn test_get_chatroom_info_member_default() {
282 let member = GetChatroomInfoMember::default();
283 assert_eq!(member.wxid, "");
284 assert_eq!(member.nick_name, "");
285 assert_eq!(member.member_flag, 0);
286 }
287
288 #[test]
289 fn test_invite_member_request_serialization() {
290 let req = InviteMemberRequest {
291 app_id: "test_app",
292 chatroom_id: "room123",
293 reason: "Join us!",
294 wxids: vec!["wxid1", "wxid2"],
295 };
296 let json = serde_json::to_string(&req).unwrap();
297 assert!(json.contains("test_app"));
298 assert!(json.contains("room123"));
299 assert!(json.contains("Join us!"));
300 }
301
302 #[test]
303 fn test_remove_member_request_serialization() {
304 let req = RemoveMemberRequest {
305 app_id: "test_app",
306 chatroom_id: "room123",
307 wxids: vec!["wxid1"],
308 };
309 let json = serde_json::to_string(&req).unwrap();
310 assert!(json.contains("test_app"));
311 assert!(json.contains("room123"));
312 assert!(json.contains("wxid1"));
313 }
314
315 #[test]
316 fn test_get_chatroom_member_list_request_serialization() {
317 let req = GetChatroomMemberListRequest {
318 app_id: "test_app",
319 chatroom_id: "room123",
320 };
321 let json = serde_json::to_string(&req).unwrap();
322 assert!(json.contains("test_app"));
323 assert!(json.contains("room123"));
324 }
325
326 #[test]
327 fn test_get_chatroom_info_request_serialization() {
328 let req = GetChatroomInfoRequest {
329 app_id: "test_app",
330 chatroom_id: "room123",
331 };
332 let json = serde_json::to_string(&req).unwrap();
333 assert!(json.contains("test_app"));
334 assert!(json.contains("room123"));
335 }
336}