ic-event-hub 0.3.2

Event-based pub/sub for IC canisters
Documentation
use async_trait::async_trait;
use ic_cdk::api::call::CallResult;
use ic_cdk::call;
use ic_cdk::export::candid::Principal;

use crate::types::{
    GetSubscribersRequest, GetSubscribersResponse, SubscribeRequest, UnsubscribeRequest,
};

#[async_trait]
pub trait IEventHubClient {
    async fn subscribe(&self, payload: SubscribeRequest) -> CallResult<()>;
    async fn unsubscribe(&self, request: UnsubscribeRequest) -> CallResult<()>;
    async fn get_subscribers(
        &self,
        request: GetSubscribersRequest,
    ) -> CallResult<(GetSubscribersResponse,)>;
}

#[async_trait]
impl IEventHubClient for Principal {
    async fn subscribe(&self, req: SubscribeRequest) -> CallResult<()> {
        call(*self, "subscribe", (req,)).await
    }

    async fn unsubscribe(&self, req: UnsubscribeRequest) -> CallResult<()> {
        call(*self, "unsubscribe", (req,)).await
    }

    async fn get_subscribers(
        &self,
        req: GetSubscribersRequest,
    ) -> CallResult<(GetSubscribersResponse,)> {
        call(*self, "get_subscribers", (req,)).await
    }
}