commonware_broadcast/linked/signer/
ingress.rs1use crate::Broadcaster;
2use commonware_cryptography::Array;
3use futures::{
4 channel::{mpsc, oneshot},
5 SinkExt,
6};
7use std::marker::PhantomData;
8
9pub enum Message<D: Array> {
11 Broadcast {
12 payload: D,
13 result: oneshot::Sender<bool>,
14 },
15}
16
17#[derive(Clone)]
19pub struct Mailbox<D: Array> {
20 sender: mpsc::Sender<Message<D>>,
21 _digest: PhantomData<D>,
22}
23
24impl<D: Array> Mailbox<D> {
25 pub(super) fn new(sender: mpsc::Sender<Message<D>>) -> Self {
26 Self {
27 sender,
28 _digest: PhantomData,
29 }
30 }
31}
32
33impl<D: Array> Broadcaster for Mailbox<D> {
34 type Digest = D;
35
36 async fn broadcast(&mut self, payload: Self::Digest) -> oneshot::Receiver<bool> {
37 let (sender, receiver) = oneshot::channel();
38 let _ = self
39 .sender
40 .send(Message::Broadcast {
41 payload,
42 result: sender,
43 })
44 .await;
45 receiver
46 }
47}