use crate::network::connection_manager::Connector;
use super::error::PeerManagerError;
use super::PeerManager;
const DEFAULT_PACEMAKER_INTERVAL: u64 = 10;
const DEFAULT_MAXIMUM_RETRY_ATTEMPTS: u64 = 5;
const INITIAL_RETRY_FREQUENCY: u64 = 10;
const DEFAULT_MAXIMUM_RETRY_FREQUENCY: u64 = 300;
const REQUESTED_ENDPOINTS_RETRY_FREQUENCY: u64 = 60;
#[derive(Default)]
pub struct PeerManagerBuilder {
connector: Option<Connector>,
max_retry_attempts: Option<u64>,
retry_interval: Option<u64>,
retry_frequency: Option<u64>,
max_retry_frequency: Option<u64>,
endpoint_retry_frequency: Option<u64>,
identity: Option<String>,
strict_ref_counts: Option<bool>,
}
impl PeerManagerBuilder {
pub fn new() -> Self {
Default::default()
}
pub fn with_connector(mut self, connector: Connector) -> Self {
self.connector = Some(connector);
self
}
pub fn with_max_retry_attempts(mut self, max_retry_attempts: u64) -> Self {
self.max_retry_attempts = Some(max_retry_attempts);
self
}
pub fn with_retry_interval(mut self, retry_interval: u64) -> Self {
self.retry_interval = Some(retry_interval);
self
}
pub fn with_retry_frequency(mut self, retry_frequency: u64) -> Self {
self.retry_frequency = Some(retry_frequency);
self
}
pub fn with_max_retry_frequency(mut self, retry_frequency: u64) -> Self {
self.max_retry_frequency = Some(retry_frequency);
self
}
pub fn with_endpoint_retry_frequency(mut self, retry_frequency: u64) -> Self {
self.endpoint_retry_frequency = Some(retry_frequency);
self
}
pub fn with_identity(mut self, identity: String) -> Self {
self.identity = Some(identity);
self
}
pub fn with_strict_ref_counts(mut self, strict_ref_counts: bool) -> Self {
self.strict_ref_counts = Some(strict_ref_counts);
self
}
pub fn start(&mut self) -> Result<PeerManager, PeerManagerError> {
let retry_interval = self.retry_interval.unwrap_or(DEFAULT_PACEMAKER_INTERVAL);
let max_retry_attempts = self
.max_retry_attempts
.unwrap_or(DEFAULT_MAXIMUM_RETRY_ATTEMPTS);
let strict_ref_counts = self.strict_ref_counts.unwrap_or(false);
let identity = self.identity.take().ok_or_else(|| {
PeerManagerError::StartUpError("Missing required value `identity`".to_string())
})?;
let connector = self.connector.take().ok_or_else(|| {
PeerManagerError::StartUpError("Missing required value `connector`".to_string())
})?;
let retry_frequency = self.retry_frequency.unwrap_or(INITIAL_RETRY_FREQUENCY);
let max_retry_frequency = self
.max_retry_frequency
.unwrap_or(DEFAULT_MAXIMUM_RETRY_FREQUENCY);
let endpoint_retry_frequency = self
.endpoint_retry_frequency
.unwrap_or(REQUESTED_ENDPOINTS_RETRY_FREQUENCY);
PeerManager::build(
retry_interval,
max_retry_attempts,
strict_ref_counts,
identity,
connector,
retry_frequency,
max_retry_frequency,
endpoint_retry_frequency,
)
}
}