use std::net::Ipv4Addr;
use libp2p::{PeerId, identity::{ed25519, PublicKey}};
use pchain_types::cryptography::PublicAddress;
#[derive(Clone)]
pub struct PeerInfo {
pub peer_id: PeerId,
pub ip_address: Ipv4Addr,
pub port: u16,
}
impl PeerInfo {
pub fn new(address: PublicAddress, ip_address: Ipv4Addr, port: u16) -> Self {
let ed25519_pk: PublicKey = ed25519::PublicKey::try_from_bytes(&address).unwrap().into();
Self {
peer_id: ed25519_pk.to_peer_id(),
ip_address,
port,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::conversions;
use libp2p::identity::Keypair;
use std::net::Ipv4Addr;
#[test]
fn test_new_peer_info() {
let test_keypair = Keypair::generate_ed25519();
let test_public_key_bytes = conversions::public_address(&test_keypair.public()).unwrap();
let test_ip_address = Ipv4Addr::new(127, 0, 0, 1);
let test_port: u16 = 1;
let test_peer_info = PeerInfo::new(test_public_key_bytes, test_ip_address, test_port);
assert_eq!(test_peer_info.ip_address.to_string().len(), 9);
assert_eq!(test_peer_info.peer_id.to_string().len(), 52);
assert_eq!(test_peer_info.port, 1);
}
}