1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use bytes::Bytes;
use crate::command::common::PbToBytes;
use crate::structs::{GroupMemberInfo, GroupMemberPermission};
use crate::{pb, RQError, RQResult};
impl super::super::super::Engine {
pub fn decode_group_member_info_response(&self, payload: Bytes) -> RQResult<GroupMemberInfo> {
let resp = pb::GroupMemberRspBody::from_bytes(&payload)
.map_err(|_| RQError::Decode("GroupMemberRspBody".to_string()))?;
let group_code = resp.group_code;
let mem_info = resp
.mem_info
.ok_or_else(|| RQError::Decode("mem_info is none".to_string()))?;
Ok(GroupMemberInfo {
group_code,
uin: mem_info.uin,
gender: mem_info.sex as u8,
nickname: String::from_utf8_lossy(&mem_info.nick).into(),
card_name: String::from_utf8_lossy(&mem_info.card).into(),
level: mem_info.level as u16,
join_time: mem_info.join,
last_speak_time: mem_info.last_speak,
special_title: String::from_utf8_lossy(&mem_info.special_title).into(),
special_title_expire_time: mem_info.special_title_expire_time as i64,
permission: match mem_info.role {
3 => GroupMemberPermission::Owner,
2 => GroupMemberPermission::Administrator,
_ => GroupMemberPermission::Member,
},
..Default::default()
})
}
}