use crate::threshold_simplex::types::{View, Voter}; use commonware_cryptography::{bls12381::primitives::variant::Variant, Digest, PublicKey}; use futures::{ channel::{mpsc, oneshot}, SinkExt, }; pub enum Message { Update { current: View, leader: P, finalized: View, active: oneshot::Sender, }, Constructed(Voter), } #[derive(Clone)] pub struct Mailbox { sender: mpsc::Sender>, } impl Mailbox { pub fn new(sender: mpsc::Sender>) -> Self { Self { sender } } pub async fn update(&mut self, current: View, leader: P, finalized: View) -> bool { let (active, active_receiver) = oneshot::channel(); self.sender .send(Message::Update { current, leader, finalized, active, }) .await .expect("Failed to send update"); active_receiver.await.unwrap() } pub async fn constructed(&mut self, message: Voter) { self.sender .send(Message::Constructed(message)) .await .expect("Failed to send message"); } }