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,
})
}
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",
})
}