tank-core 0.35.0

Core of Tank: the Rust data layer. This is intended to be used by drivers to implement a backend.
Documentation
use std::time::Duration;

#[derive(Clone, Copy)]
pub enum QueueMode {
    Fifo,
    Lifo,
}

#[derive(Clone, Copy)]
pub struct PoolConfig {
    pub max_size: usize,
    pub wait_timeout: Option<Duration>,
    pub create_timeout: Option<Duration>,
    pub recycle_timeout: Option<Duration>,
    pub queue_mode: QueueMode,
}

impl PoolConfig {
    pub fn new() -> Self {
        deadpool::managed::PoolConfig::default().into()
    }
}

impl From<PoolConfig> for deadpool::managed::PoolConfig {
    fn from(value: PoolConfig) -> Self {
        Self {
            max_size: value.max_size,
            timeouts: deadpool::managed::Timeouts {
                wait: value.wait_timeout,
                create: value.create_timeout,
                recycle: value.recycle_timeout,
            },
            queue_mode: match value.queue_mode {
                QueueMode::Fifo => deadpool::managed::QueueMode::Fifo,
                QueueMode::Lifo => deadpool::managed::QueueMode::Lifo,
            },
        }
    }
}

impl From<deadpool::managed::PoolConfig> for PoolConfig {
    fn from(value: deadpool::managed::PoolConfig) -> Self {
        Self {
            max_size: value.max_size,
            wait_timeout: value.timeouts.wait,
            create_timeout: value.timeouts.create,
            recycle_timeout: value.timeouts.recycle,
            queue_mode: match value.queue_mode {
                deadpool::managed::QueueMode::Fifo => QueueMode::Fifo,
                deadpool::managed::QueueMode::Lifo => QueueMode::Lifo,
            },
        }
    }
}

impl Default for PoolConfig {
    fn default() -> Self {
        Self::new()
    }
}