descord 0.1.11

A minimal discord api wrapper.
Documentation
use super::*;

implemented_enum! {
    pub enum HandlerValue {
        ReadyData,
        Message,
        DeletedMessage,
        Reaction,
        GuildCreate,
        Interaction,
        RoleDelete,
        RoleEvent,
        Reconnect,
    }
}

#[derive(Debug, Clone)]
pub struct EventHandler {
    pub event: Event,
    pub handler_fn: EventHandlerFn,
}

pub type EventHandlerFn = fn(
    HandlerValue,
) -> std::pin::Pin<
    Box<dyn futures_util::Future<Output = DescordResult> + Send + 'static>,
>;

impl EventHandler {
    pub async fn call(&self, data: HandlerValue) -> DescordResult {
        let fut = ((self.handler_fn)(data));
        let boxed_fut: std::pin::Pin<
            Box<dyn std::future::Future<Output = DescordResult> + Send + 'static>,
        > = Box::pin(fut);
        boxed_fut.await
    }
}