use std::fmt::Debug;
use std::future::Future;
use async_trait::async_trait;
use crate::message::BrokerRequest;
use crate::prelude::ActonMessage;
use crate::traits::Actor;
#[async_trait]
pub trait Broker: Clone + Debug + Default {
fn broadcast(&self, message: impl ActonMessage) -> impl Future<Output=()> + Send + Sync + '_;
fn broadcast_sync(&self, message: impl ActonMessage) -> anyhow::Result<()>
where
Self: Actor,
{
let envelope = self.create_envelope(Some(self.reply_address()));
envelope.reply(BrokerRequest::new(message))?;
Ok(())
}
}