bytesandbrains_core/
peer.rs1use crate::{
2 address::{Address, AddressBook},
3 peer_id::PeerId,
4};
5
6#[derive(Clone, Debug, Hash, PartialEq, Eq)]
11pub struct Peer<A: Address> {
12 pub peer_id: PeerId,
13 pub addresses: AddressBook<A>,
14}
15
16impl<A: Address> Peer<A> {
17 pub fn new(peer_id: PeerId, addresses: AddressBook<A>) -> Self {
18 Self { peer_id, addresses }
19 }
20}
21
22impl<A: Address> std::fmt::Display for Peer<A> {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 write!(f, "Peer({}, {})", self.peer_id, self.addresses.first().to_string())
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_peer_creation() {
34 let id = PeerId::from_data("test-peer");
35 let addrs = AddressBook::new("127.0.0.1:8080".to_string(), 5);
36 let peer = Peer::new(id, addrs);
37 assert_eq!(peer.peer_id, id);
38 assert_eq!(peer.addresses.len(), 1);
39 }
40
41 #[test]
42 fn test_peer_clone() {
43 let id = PeerId::from_data("test-peer");
44 let addrs = AddressBook::new("127.0.0.1:8080".to_string(), 5);
45 let peer1 = Peer::new(id, addrs);
46 let peer2 = peer1.clone();
47 assert_eq!(peer1, peer2);
48 }
49
50 #[test]
51 fn test_peer_equality() {
52 let id = PeerId::from_data("same");
53 let addrs1 = AddressBook::new("addr1".to_string(), 5);
54 let addrs2 = AddressBook::new("addr2".to_string(), 5);
55 let peer1 = Peer::new(id, addrs1);
56 let peer2 = Peer::new(id, addrs2);
57 assert_ne!(peer1, peer2);
59 }
60
61 #[test]
62 fn test_peer_hash_as_key() {
63 use std::collections::HashMap;
64 let id = PeerId::from_data("peer1");
65 let addrs = AddressBook::new("addr".to_string(), 5);
66 let peer = Peer::new(id, addrs);
67 let mut map = HashMap::new();
68 map.insert(peer.clone(), 42);
69 assert_eq!(map.get(&peer), Some(&42));
70 }
71}