use crate::{ simplex::types::{Notarization, Nullification, View}, Viewable, }; use commonware_cryptography::{Digest, Signature}; use futures::{channel::mpsc, SinkExt}; // If either of these requests fails, it will not send a reply. pub enum Message { Notarization(Notarization), Nullification(Nullification), } impl Viewable for Message { type View = View; fn view(&self) -> View { match self { Message::Notarization(notarization) => notarization.view(), Message::Nullification(nullification) => nullification.view(), } } } #[derive(Clone)] pub struct Mailbox { sender: mpsc::Sender>, } impl Mailbox { pub fn new(sender: mpsc::Sender>) -> Self { Self { sender } } pub async fn notarization(&mut self, notarization: Notarization) { self.sender .send(Message::Notarization(notarization)) .await .expect("Failed to send notarization"); } pub async fn nullification(&mut self, nullification: Nullification) { self.sender .send(Message::Nullification(nullification)) .await .expect("Failed to send nullification"); } }