soup-sdk 0.3.4

채팅 이벤트 수신 SDK
Documentation
use crate::chat::{
    DonationEvent,
    events::EventMeta,
    parser::{
        raw::{ParseResult, RawMessage},
        util::normalize_user_id,
    },
    types::DonationType,
};

pub fn parse_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::Balloon,
        from: normalize_user_id(raw.field(1)?),
        from_label: raw.field_string(2)?,
        amount: raw.parse_u32_or_default(3, 0),
        fan_club_ordinal: raw.parse_u32_or_default(4, 0),
        become_top_fan: raw.field(8)? == "1",
    })
}

pub fn parse_balloon_sub_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::Balloon,
        from: normalize_user_id(raw.field(3)?),
        from_label: raw.field_string(4)?,
        amount: raw.parse_u32_or_default(5, 0),
        fan_club_ordinal: raw.parse_u32_or_default(6, 0),
        become_top_fan: raw.field(9)? == "1",
    })
}

pub fn parse_vod_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::Balloon,
        from: normalize_user_id(raw.field(1)?),
        from_label: raw.field_string(2)?,
        amount: raw.parse_u32_or_default(3, 0),
        fan_club_ordinal: 0,
        become_top_fan: false,
    })
}

// --- ad balloon
pub fn parse_vod_ad_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::ADBalloon,
        from: normalize_user_id(raw.field(1)?),
        from_label: raw.field_string(2)?,
        amount: raw.parse_u32_or_default(3, 0),
        fan_club_ordinal: 0,
        become_top_fan: false,
    })
}

pub fn parse_ad_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::ADBalloon,
        from: normalize_user_id(raw.field(2)?),
        from_label: raw.field_string(3)?,
        amount: raw.parse_u32_or_default(9, 0),
        fan_club_ordinal: raw.parse_u32_or_default(10, 0),
        become_top_fan: raw.field(12)? == "1",
    })
}

pub fn parse_station_ad_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::ADBalloon,
        from: normalize_user_id(raw.field(1)?),
        from_label: raw.field_string(2)?,
        amount: raw.parse_u32_or_default(3, 0),
        fan_club_ordinal: 0,
        become_top_fan: false,
    })
}

pub fn parse_video_balloon_event(raw: RawMessage) -> ParseResult<DonationEvent> {
    Ok(DonationEvent {
        meta: EventMeta {
            received_time: raw.received_time,
        },
        donation_type: DonationType::VODBalloon,
        from: normalize_user_id(raw.field(2)?),
        from_label: raw.field_string(3)?,
        amount: raw.parse_u32_or_default(4, 0),
        fan_club_ordinal: raw.parse_u32_or_default(5, 0),
        become_top_fan: raw.field(7)? == "1",
    })
}