Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion consensus/src/marshal/resolver/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ use commonware_actor::mailbox::{self, Overflow, Policy, Sender};
use commonware_codec::{EncodeSize, Error as CodecError, Read, ReadExt, Write};
use commonware_cryptography::Digest;
use commonware_resolver::{p2p::Producer, Consumer, Delivery, Fetch as ResolverFetch};
use commonware_runtime::Metrics;
use commonware_utils::{channel::oneshot, Span};
use std::{
collections::VecDeque,
fmt::{Debug, Display},
hash::{Hash, Hasher},
num::NonZeroUsize,
sync::mpsc::TryRecvError,
};

Expand Down Expand Up @@ -95,7 +97,7 @@ impl<D: Digest> Policy for Message<D> {
/// This struct implements the [Consumer] and [Producer] traits from the
/// resolver, and acts as a bridge to the main actor loop.
#[derive(Clone)]
pub(crate) struct Handler<D: Digest> {
pub struct Handler<D: Digest> {
sender: Sender<Message<D>>,
}

Expand All @@ -106,6 +108,12 @@ impl<D: Digest> Handler<D> {
}
}

/// Creates a resolver receiver and handler pair.
pub fn init<D: Digest>(metrics: impl Metrics, capacity: NonZeroUsize) -> (Receiver<D>, Handler<D>) {
let (sender, receiver) = mailbox::new(metrics, capacity);
(Receiver::new(receiver), Handler::new(sender))
}

/// Receiver for resolver handler messages.
pub struct Receiver<D: Digest> {
inner: mailbox::Receiver<Message<D>>,
Expand Down
Loading