scatter_net/legacy/peer_group/methods/
get_peer_by_hash.rs

1use 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}