@@ -732,6 +732,26 @@ where
732732 /// The result of the query is delivered in a
733733 /// [`Event::OutboundQueryProgressed{QueryResult::GetClosestPeers}`].
734734 pub fn get_closest_peers < K > ( & mut self , key : K ) -> QueryId
735+ where
736+ K : Into < kbucket:: Key < K > > + Into < Vec < u8 > > + Clone ,
737+ {
738+ self . get_closest_peers_inner ( key, None )
739+ }
740+
741+ /// Initiates an iterative query for the closest peers to the given key.
742+ ///
743+ /// The result of the query is delivered in a
744+ /// [`Event::OutboundQueryProgressed{QueryResult::GetClosestPeers}`].
745+ ///
746+ /// The expected responding peers is specified by `num_results`
747+ pub fn get_closest_peers_num_results < K > ( & mut self , key : K , num_results : NonZeroUsize ) -> QueryId
748+ where
749+ K : Into < kbucket:: Key < K > > + Into < Vec < u8 > > + Clone ,
750+ {
751+ self . get_closest_peers_inner ( key, Some ( num_results) )
752+ }
753+
754+ fn get_closest_peers_inner < K > ( & mut self , key : K , num_results : Option < NonZeroUsize > ) -> QueryId
735755 where
736756 K : Into < kbucket:: Key < K > > + Into < Vec < u8 > > + Clone ,
737757 {
@@ -740,8 +760,10 @@ where
740760 let info = QueryInfo :: GetClosestPeers {
741761 key,
742762 step : ProgressStep :: first ( ) ,
763+ num_results,
743764 } ;
744765 let peer_keys: Vec < kbucket:: Key < PeerId > > = self . kbuckets . closest_keys ( & target) . collect ( ) ;
766+
745767 self . queries . add_iter_closest ( target, peer_keys, info)
746768 }
747769
@@ -1485,7 +1507,7 @@ where
14851507 } )
14861508 }
14871509
1488- QueryInfo :: GetClosestPeers { key, mut step } => {
1510+ QueryInfo :: GetClosestPeers { key, mut step, .. } => {
14891511 step. last = true ;
14901512
14911513 Some ( Event :: OutboundQueryProgressed {
@@ -1702,7 +1724,7 @@ where
17021724 } ,
17031725 } ) ,
17041726
1705- QueryInfo :: GetClosestPeers { key, mut step } => {
1727+ QueryInfo :: GetClosestPeers { key, mut step, .. } => {
17061728 step. last = true ;
17071729 Some ( Event :: OutboundQueryProgressed {
17081730 id : query_id,
@@ -3175,6 +3197,8 @@ pub enum QueryInfo {
31753197 key : Vec < u8 > ,
31763198 /// Current index of events.
31773199 step : ProgressStep ,
3200+ /// If required, `num_results` specifies expected responding peers
3201+ num_results : Option < NonZeroUsize > ,
31783202 } ,
31793203
31803204 /// A (repeated) query initiated by [`Behaviour::get_providers`].
0 commit comments