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
36
37
38
39
40
41
42
43
44
45
use bytes::{Buf, Bytes};
use crate::jce::{RespSummaryCard, RespSummaryCardHead};
use crate::structs::SummaryCardInfo;
use crate::{jce, RQError, RQResult};
impl super::super::super::Engine {
pub fn decode_summary_card_response(&self, mut payload: Bytes) -> RQResult<SummaryCardInfo> {
let mut request: jce::RequestPacket =
jcers::from_buf(&mut payload).map_err(RQError::from)?;
let mut data: jce::RequestDataVersion2 =
jcers::from_buf(&mut request.s_buffer).map_err(RQError::from)?;
let mut head = data
.map
.remove("RespHead")
.ok_or_else(|| RQError::Decode("missing RespHead".into()))?
.remove("SummaryCard.RespHead")
.ok_or_else(|| RQError::Decode("missing SummaryCard.RespHead".into()))?;
head.advance(1);
let head: RespSummaryCardHead = jcers::from_buf(&mut head).map_err(RQError::Jce)?;
let mut rsp = data
.map
.remove("RespSummaryCard")
.ok_or_else(|| RQError::Decode("missing RespSummaryCard".into()))?
.remove("SummaryCard.RespSummaryCard")
.ok_or_else(|| RQError::Decode("missing SummaryCard.RespSummaryCard".into()))?;
rsp.advance(1);
let rsp: RespSummaryCard = jcers::from_buf(&mut rsp).map_err(RQError::Jce)?;
let info = SummaryCardInfo {
sex: rsp.sex,
age: rsp.age,
nickname: rsp.nickname,
level: rsp.level,
city: rsp.city,
sign: rsp.sign,
mobile: rsp.mobile,
uin: rsp.uin,
login_days: rsp.login_days,
cookie: head.cookie,
};
Ok(info)
}
}