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}