botrs 0.13.0

A Rust QQ Bot framework based on QQ Guild Bot API
Documentation
use super::payload::PayloadData;
use crate::MessageReaction;
use crate::forum::{ForumAuditResult, Post, Reply, Thread};
use crate::interaction::Interaction;
use crate::manage::{C2CFriendData, EnterAioEvent, SubscribeMessageStatusData};
use crate::models::{
    api::AudioAction,
    channel::Channel,
    gateway::WSPayload,
    guild::{Guild, Member},
    message::{Message, MessageAudit, MessageDelete},
};

macro_rules! typed_handler {
    ($fn_name:ident, $data:ty) => {
        pub(super) fn $fn_name(payload: &mut WSPayload, message: &[u8]) -> crate::Result<()> {
            let _: $data = <$data as PayloadData>::parse_from_payload(payload, message)?;
            Ok(())
        }
    };
}

typed_handler!(guild_handler, Guild);
typed_handler!(guild_member_handler, Member);
typed_handler!(channel_handler, Channel);
typed_handler!(message_handler, Message);
typed_handler!(message_delete_handler, MessageDelete);
typed_handler!(message_reaction_handler, MessageReaction);
typed_handler!(at_message_handler, Message);
typed_handler!(public_message_delete_handler, MessageDelete);
typed_handler!(direct_message_handler, Message);
typed_handler!(direct_message_delete_handler, MessageDelete);
typed_handler!(audio_handler, AudioAction);
typed_handler!(thread_handler, Thread);
typed_handler!(post_handler, Post);
typed_handler!(reply_handler, Reply);
typed_handler!(forum_audit_handler, ForumAuditResult);
typed_handler!(message_audit_handler, MessageAudit);
typed_handler!(interaction_handler, Interaction);
typed_handler!(group_at_message_handler, Message);
typed_handler!(c2c_message_handler, Message);
typed_handler!(subscribe_msg_status_handler, SubscribeMessageStatusData);
typed_handler!(c2c_friend_handler, C2CFriendData);
typed_handler!(enter_aio_handler, EnterAioEvent);