use super::PeerTokenPair;
use crate::peer::connector::PeerRemover;
#[derive(Debug, PartialEq)]
pub struct PeerRef {
peer_id: PeerTokenPair,
peer_remover: PeerRemover,
}
impl PeerRef {
pub(super) fn new(peer_id: PeerTokenPair, peer_remover: PeerRemover) -> Self {
PeerRef {
peer_id,
peer_remover,
}
}
pub fn peer_id(&self) -> &PeerTokenPair {
&self.peer_id
}
}
impl Drop for PeerRef {
fn drop(&mut self) {
match self.peer_remover.remove_peer_ref(&self.peer_id) {
Ok(_) => (),
Err(err) => error!(
"Unable to remove reference to {} on drop: {}",
self.peer_id, err
),
}
}
}
#[derive(Debug, PartialEq)]
pub struct EndpointPeerRef {
endpoint: String,
connection_id: String,
peer_remover: PeerRemover,
}
impl EndpointPeerRef {
pub(super) fn new(endpoint: String, connection_id: String, peer_remover: PeerRemover) -> Self {
EndpointPeerRef {
endpoint,
connection_id,
peer_remover,
}
}
pub fn endpoint(&self) -> &str {
&self.endpoint
}
}
impl Drop for EndpointPeerRef {
fn drop(&mut self) {
match self
.peer_remover
.remove_peer_ref_by_endpoint(&self.endpoint, &self.connection_id)
{
Ok(_) => (),
Err(err) => error!(
"Unable to remove reference to peer with endpoint {} on drop: {}",
self.endpoint, err
),
}
}
}