nuts 0.2.1

Nuts is a library that offers a simple publish-subscribe API, featuring decoupled creation of the publisher and the subscriber.
Documentation
pub(crate) use broadcast::BroadcastInfo;

mod broadcast;
mod response;
pub(crate) use response::ResponseTracker;
pub(crate) use response::Slot as ResponseSlot;

use crate::nut::Nut;
use crate::*;
use core::any::Any;

use self::response::NutsResponse;

impl Nut {
    pub(crate) fn broadcast(&self, broadcast: BroadcastInfo) {
        self.deferred_events.push(broadcast.into());
        self.catch_up_deferred_to_quiescence();
    }
    pub(crate) fn publish_and_await<MSG: Any>(&self, msg: MSG) -> NutsResponse {
        let broadcast = BroadcastInfo::global(msg, Topic::public_message::<MSG>());
        let ticket = Nut::with_response_tracker_mut(|rt| rt.allocate());
        let future = NutsResponse::new(&ticket);
        self.deferred_events
            .push(nut::exec::Deferred::BroadcastAwaitingResponse(
                broadcast, ticket,
            ));
        self.catch_up_deferred_to_quiescence();
        future
    }
}