use crate::types::{utils::calc_age, NodeId, PublicKey};
use ed25519_dalek::Keypair;
use std::{
fmt::{self, Display, Formatter},
net::SocketAddr,
sync::Arc,
};
use xor_name::XorName;
#[derive(Clone, custom_debug::Debug)]
pub struct MyNodeInfo {
#[debug(skip)]
pub keypair: Arc<Keypair>,
pub addr: SocketAddr,
}
impl MyNodeInfo {
pub fn new(keypair: Keypair, addr: SocketAddr) -> Self {
Self {
keypair: Arc::new(keypair),
addr,
}
}
pub fn id(&self) -> NodeId {
NodeId::new(self.name(), self.addr)
}
pub fn name(&self) -> XorName {
XorName::from(PublicKey::from(self.keypair.public))
}
pub fn public_key(&self) -> PublicKey {
PublicKey::from(self.keypair.public)
}
pub fn age(&self) -> u8 {
calc_age(&self.name())
}
}
impl Display for MyNodeInfo {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "{}", self.name())
}
}