use crate::chat::{
events::{EventMeta, FreezeEvent},
parser::{
constants::freeze_target_flags,
raw::{ParseResult, RawMessage},
util::is,
},
};
pub fn parse_freeze_event(raw: RawMessage) -> ParseResult<FreezeEvent> {
Ok(FreezeEvent {
meta: EventMeta {
received_time: raw.received_time,
},
freezed: raw.field(0)? != "0",
limit_balloons: raw.parse_u32_or_default(3, 0),
limit_subscription_month: raw.parse_u32_or_default(4, 0),
targets: parse_freeze_targets(raw.field(2)?),
})
}
fn parse_freeze_targets(flag_str: &str) -> Vec<String> {
let mut targets: Vec<String> = Vec::new();
let flag = flag_str.parse::<u32>().unwrap_or(0);
if is(flag, freeze_target_flags::NORMAL) {
targets.push("BJ".to_string());
}
if is(flag, freeze_target_flags::FAN) {
targets.push("FAN".to_string());
}
if is(flag, freeze_target_flags::SUPPORTER) {
targets.push("SUPPORTER".to_string());
}
if is(flag, freeze_target_flags::TOP_FAN) {
targets.push("TOP_FAN".to_string());
}
if is(flag, freeze_target_flags::FOLLOWER) {
targets.push("FOLLOWER".to_string());
}
if is(flag, freeze_target_flags::MANAGER) {
targets.push("MANGER".to_string());
}
targets
}