Skip to main content

tank_core/
pool_config.rs

1use std::time::Duration;
2
3#[derive(Clone, Copy)]
4pub enum QueueMode {
5    Fifo,
6    Lifo,
7}
8
9#[derive(Clone, Copy)]
10pub struct PoolConfig {
11    pub max_size: usize,
12    pub wait_timeout: Option<Duration>,
13    pub create_timeout: Option<Duration>,
14    pub recycle_timeout: Option<Duration>,
15    pub queue_mode: QueueMode,
16}
17
18impl PoolConfig {
19    pub fn new() -> Self {
20        deadpool::managed::PoolConfig::default().into()
21    }
22}
23
24impl From<PoolConfig> for deadpool::managed::PoolConfig {
25    fn from(value: PoolConfig) -> Self {
26        Self {
27            max_size: value.max_size,
28            timeouts: deadpool::managed::Timeouts {
29                wait: value.wait_timeout,
30                create: value.create_timeout,
31                recycle: value.recycle_timeout,
32            },
33            queue_mode: match value.queue_mode {
34                QueueMode::Fifo => deadpool::managed::QueueMode::Fifo,
35                QueueMode::Lifo => deadpool::managed::QueueMode::Lifo,
36            },
37        }
38    }
39}
40
41impl From<deadpool::managed::PoolConfig> for PoolConfig {
42    fn from(value: deadpool::managed::PoolConfig) -> Self {
43        Self {
44            max_size: value.max_size,
45            wait_timeout: value.timeouts.wait,
46            create_timeout: value.timeouts.create,
47            recycle_timeout: value.timeouts.recycle,
48            queue_mode: match value.queue_mode {
49                deadpool::managed::QueueMode::Fifo => QueueMode::Fifo,
50                deadpool::managed::QueueMode::Lifo => QueueMode::Lifo,
51            },
52        }
53    }
54}
55
56impl Default for PoolConfig {
57    fn default() -> Self {
58        Self::new()
59    }
60}