use std::collections::HashMap;
use std::time::Instant;
use super::PeerAuthorizationToken;
use super::PeerTokenPair;
#[derive(Debug, Clone)]
pub struct UnreferencedPeer {
pub endpoint: String,
pub connection_id: String,
pub local_authorization: PeerAuthorizationToken,
pub old_connection_ids: Vec<String>,
}
#[derive(Debug)]
pub struct RequestedEndpoint {
pub endpoint: String,
pub local_authorization: PeerAuthorizationToken,
}
pub struct UnreferencedPeerState {
pub peers: HashMap<PeerTokenPair, UnreferencedPeer>,
pub requested_endpoints: HashMap<String, RequestedEndpoint>,
pub last_connection_attempt: Instant,
pub retry_frequency: u64,
}
impl UnreferencedPeerState {
pub fn new(retry_frequency: u64) -> Self {
UnreferencedPeerState {
peers: HashMap::default(),
requested_endpoints: HashMap::default(),
last_connection_attempt: Instant::now(),
retry_frequency,
}
}
pub fn get_by_connection_id(
&self,
connection_id: &str,
) -> Option<(PeerTokenPair, UnreferencedPeer)> {
self.peers
.iter()
.find(|(_, peer)| {
peer.connection_id == connection_id
|| peer.old_connection_ids.contains(&connection_id.to_string())
})
.map(|(id, peer)| (id.clone(), peer.clone()))
}
}