soup-sdk 0.3.4

채팅 이벤트 수신 SDK
Documentation
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
}