soup-sdk 0.3.2

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