scatter_net/legacy/peer_group/methods/
get_peer_by_hash.rs1use ps_hkey::Hash;
2
3use crate::{distance, Peer, PeerGroup};
4
5impl PeerGroup {
6 #[must_use]
7 pub fn get_peer_by_hash(&self, hash: &Hash) -> Option<Peer> {
8 let mut sel_distance = u64::MAX;
9 let mut selected = None;
10
11 self.read().peers.iter().for_each(|(node_id, peer)| {
12 if !peer.is_available() {
13 return;
14 }
15
16 let iter_distance = distance(hash, node_id);
17
18 if iter_distance < sel_distance {
19 sel_distance = iter_distance;
20 selected = Some(peer.clone());
21 }
22 });
23
24 selected
25 }
26}