use std::time::Duration;
use super::policy::PoolFairnessPolicy;
const DEFAULT_POOL_SIZE: usize = 4;
const DEFAULT_MAX_IN_FLIGHT_PER_SOCKET: usize = 1;
const DEFAULT_IDLE_TIMEOUT_SECS: u64 = 600;
const DEFAULT_IDLE_TIMEOUT: Duration = Duration::from_secs(DEFAULT_IDLE_TIMEOUT_SECS);
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ClientPoolConfig {
pool_size: usize,
max_in_flight_per_socket: usize,
idle_timeout: Duration,
fairness_policy: PoolFairnessPolicy,
}
impl Default for ClientPoolConfig {
fn default() -> Self {
Self {
pool_size: DEFAULT_POOL_SIZE,
max_in_flight_per_socket: DEFAULT_MAX_IN_FLIGHT_PER_SOCKET,
idle_timeout: DEFAULT_IDLE_TIMEOUT,
fairness_policy: PoolFairnessPolicy::RoundRobin,
}
}
}
impl ClientPoolConfig {
#[must_use]
pub fn pool_size(mut self, size: usize) -> Self {
self.pool_size = size.max(1);
self
}
#[must_use]
pub fn max_in_flight_per_socket(mut self, limit: usize) -> Self {
self.max_in_flight_per_socket = limit.max(1);
self
}
#[must_use]
pub fn idle_timeout(mut self, timeout: Duration) -> Self {
self.idle_timeout = timeout.max(Duration::from_millis(1));
self
}
#[must_use]
pub fn fairness_policy(mut self, fairness_policy: PoolFairnessPolicy) -> Self {
self.fairness_policy = fairness_policy;
self
}
#[must_use]
pub const fn pool_size_value(&self) -> usize { self.pool_size }
#[must_use]
pub const fn max_in_flight_per_socket_value(&self) -> usize { self.max_in_flight_per_socket }
#[must_use]
pub const fn idle_timeout_value(&self) -> Duration { self.idle_timeout }
#[must_use]
pub const fn fairness_policy_value(&self) -> PoolFairnessPolicy { self.fairness_policy }
}