use crate::chat::{
ChatEvent,
events::EventMeta,
parser::{
raw::{ParseResult, RawMessage},
user::parse_user_status,
util::normalize_user_id,
},
types::{ChatType, Emoticon, User, UserSubscribe},
};
pub fn parse_emoticon_event(raw: RawMessage) -> ParseResult<ChatEvent> {
let sub = parse_subscribe(&raw);
Ok(ChatEvent {
meta: EventMeta {
received_time: raw.received_time,
},
chat_type: ChatType::Emoticon,
comment: raw.field(1)?.replace("\r", ""),
user: User {
id: normalize_user_id(raw.field(5)?),
label: raw.field_string(6)?,
status: parse_user_status(raw.field(7)?),
subscribe: Some(sub),
},
emoticon: Some(Emoticon {
id: raw.field_string(2)?,
number: raw.field_string(3)?,
ext: raw.field_string(11)?,
version: raw.field_string(4)?,
}),
is_admin: false,
})
}
fn parse_subscribe(raw: &RawMessage) -> UserSubscribe {
UserSubscribe {
acc: raw.parse_u32_or_default(15, 0),
current: raw.parse_u32_or_default(12, 0),
}
}