gewe_core/group/
member.rs

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}