async_pub_sub 0.2.1

A library aiming at making async pub-sub easier in Rust
Documentation
use async_pub_sub::{DebuggingPublisherLayer, PublisherBuilder, PublisherImpl, SubscriberImpl};
use async_pub_sub_macros::{DerivePublisher, DeriveSubscriber};

use crate::{
    cache::{CacheInterface, CacheInterfaceClient, CacheInterfaceMessage},
    timer::DataConsumerTimerNotification,
};

const NAME: &str = "Customer";

#[derive(DerivePublisher, DeriveSubscriber)]
pub struct DataConsumerService {
    #[publisher(CacheInterfaceMessage)]
    cache_rpc_client: CacheInterfaceClient,
    #[subscriber(DataConsumerTimerNotification)]
    timer_notification_subscriber: SubscriberImpl<DataConsumerTimerNotification>,
}

impl DataConsumerService {
    pub fn new() -> Self {
        let cache_publisher = PublisherBuilder::new()
            .layer(DebuggingPublisherLayer)
            .publisher(PublisherImpl::new(NAME, 10));

        Self {
            cache_rpc_client: CacheInterfaceClient::new(cache_publisher),
            timer_notification_subscriber: SubscriberImpl::new(NAME),
        }
    }

    pub async fn run(mut self) {
        log::info!("Starting {}", NAME);
        loop {
            let _ = self.timer_notification_subscriber.receive().await;
            let data = self.cache_rpc_client.get_data().await;

            log::info!("[{}] data: {:?}", NAME, data)
        }
    }
}