use super::*;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum SessionPoolHealthCheck {
None,
OnCheckout,
OnCheckoutIfIdleFor(Duration),
}
#[derive(Clone, Debug)]
pub struct SessionPoolConfig {
pub(super) max_sessions: usize,
pub(super) acquire_timeout: Option<Duration>,
pub(super) idle_timeout: Option<Duration>,
pub(super) health_check: SessionPoolHealthCheck,
pub(super) prewarm_sessions: usize,
}
impl SessionPoolConfig {
pub fn new(max_sessions: usize) -> Result<Self, SvnError> {
if max_sessions == 0 {
return Err(SvnError::Protocol("max_sessions must be > 0".into()));
}
Ok(Self {
max_sessions,
acquire_timeout: None,
idle_timeout: None,
health_check: SessionPoolHealthCheck::None,
prewarm_sessions: 0,
})
}
pub fn max_sessions(&self) -> usize {
self.max_sessions
}
#[must_use]
pub fn with_acquire_timeout(mut self, timeout: Duration) -> Self {
self.acquire_timeout = Some(timeout);
self
}
#[must_use]
pub fn with_idle_timeout(mut self, timeout: Duration) -> Self {
self.idle_timeout = Some(timeout);
self
}
#[must_use]
pub fn with_health_check(mut self, health_check: SessionPoolHealthCheck) -> Self {
self.health_check = health_check;
self
}
#[must_use]
pub fn with_prewarm_sessions(mut self, sessions: usize) -> Self {
self.prewarm_sessions = sessions;
self
}
}