@@ -4,11 +4,13 @@ use commonware_actor::mailbox::{self, Overflow, Policy, Sender};
44use commonware_codec:: { EncodeSize , Error as CodecError , Read , ReadExt , Write } ;
55use commonware_cryptography:: Digest ;
66use commonware_resolver:: { p2p:: Producer , Consumer , Delivery , Fetch as ResolverFetch } ;
7+ use commonware_runtime:: Metrics ;
78use commonware_utils:: { channel:: oneshot, Span } ;
89use std:: {
910 collections:: VecDeque ,
1011 fmt:: { Debug , Display } ,
1112 hash:: { Hash , Hasher } ,
13+ num:: NonZeroUsize ,
1214 sync:: mpsc:: TryRecvError ,
1315} ;
1416
@@ -95,7 +97,7 @@ impl<D: Digest> Policy for Message<D> {
9597/// This struct implements the [Consumer] and [Producer] traits from the
9698/// resolver, and acts as a bridge to the main actor loop.
9799#[ derive( Clone ) ]
98- pub ( crate ) struct Handler < D : Digest > {
100+ pub struct Handler < D : Digest > {
99101 sender : Sender < Message < D > > ,
100102}
101103
@@ -106,6 +108,12 @@ impl<D: Digest> Handler<D> {
106108 }
107109}
108110
111+ /// Creates a resolver receiver and handler pair.
112+ pub fn init < D : Digest > ( metrics : impl Metrics , capacity : NonZeroUsize ) -> ( Receiver < D > , Handler < D > ) {
113+ let ( sender, receiver) = mailbox:: new ( metrics, capacity) ;
114+ ( Receiver :: new ( receiver) , Handler :: new ( sender) )
115+ }
116+
109117/// Receiver for resolver handler messages.
110118pub struct Receiver < D : Digest > {
111119 inner : mailbox:: Receiver < Message < D > > ,
0 commit comments