@@ -3,12 +3,14 @@ use bytes::{Buf, BufMut, Bytes};
33use commonware_actor:: mailbox:: { self , Overflow , Policy , Sender } ;
44use commonware_codec:: { EncodeSize , Error as CodecError , Read , ReadExt , Write } ;
55use commonware_cryptography:: Digest ;
6+ use commonware_runtime:: Metrics ;
67use commonware_resolver:: { p2p:: Producer , Consumer , Delivery , Fetch as ResolverFetch } ;
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,15 @@ impl<D: Digest> Handler<D> {
106108 }
107109}
108110
111+ /// Creates a resolver receiver and handler pair.
112+ pub fn init < D : Digest > (
113+ metrics : impl Metrics ,
114+ capacity : NonZeroUsize ,
115+ ) -> ( Receiver < D > , Handler < D > ) {
116+ let ( sender, receiver) = mailbox:: new ( metrics, capacity) ;
117+ ( Receiver :: new ( receiver) , Handler :: new ( sender) )
118+ }
119+
109120/// Receiver for resolver handler messages.
110121pub struct Receiver < D : Digest > {
111122 inner : mailbox:: Receiver < Message < D > > ,
0 commit comments