use std::{
fmt::{self, Display, Formatter},
net::SocketAddr,
};
use datasize::DataSize;
use serde::{Deserialize, Serialize};
use crate::types::{Item, Tag};
#[derive(
Copy, Clone, DataSize, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, Debug,
)]
pub struct GossipedAddress {
address: SocketAddr,
index: u32,
}
impl GossipedAddress {
pub(super) fn new(address: SocketAddr, index: u32) -> Self {
GossipedAddress { address, index }
}
}
impl Display for GossipedAddress {
fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
write!(
formatter,
"gossiped-address {} iter {}",
self.address, self.index
)
}
}
impl Item for GossipedAddress {
type Id = GossipedAddress;
const TAG: Tag = Tag::GossipedAddress;
const ID_IS_COMPLETE_ITEM: bool = true;
fn id(&self) -> Self::Id {
*self
}
}
impl From<GossipedAddress> for SocketAddr {
fn from(gossiped_address: GossipedAddress) -> Self {
gossiped_address.address
}
}