Skip to main content

soma_codemode/pool/
config.rs

1pub const POOL_SIZE_ENV: &str = "SOMA_CODE_MODE_POOL_SIZE";
2pub const RECYCLE_AFTER_ENV: &str = "SOMA_CODE_MODE_POOL_RECYCLE_AFTER";
3pub const MAX_OVERFLOW_ENV: &str = "SOMA_CODE_MODE_POOL_MAX_OVERFLOW";
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct PoolConfig {
7    pub size: usize,
8    pub recycle_after: u64,
9    pub max_overflow: usize,
10}
11
12impl Default for PoolConfig {
13    fn default() -> Self {
14        Self {
15            size: 2,
16            recycle_after: 100,
17            max_overflow: 8,
18        }
19    }
20}
21
22impl PoolConfig {
23    pub fn from_env() -> Self {
24        Self {
25            size: read_usize(POOL_SIZE_ENV, 2).min(16),
26            recycle_after: read_u64(RECYCLE_AFTER_ENV, 100).max(1),
27            max_overflow: read_usize(MAX_OVERFLOW_ENV, 8).min(64),
28        }
29    }
30
31    pub fn is_disabled(self) -> bool {
32        self.size == 0
33    }
34}
35
36fn read_usize(name: &str, default: usize) -> usize {
37    std::env::var(name)
38        .ok()
39        .and_then(|value| value.trim().parse().ok())
40        .unwrap_or(default)
41}
42
43fn read_u64(name: &str, default: u64) -> u64 {
44    std::env::var(name)
45        .ok()
46        .and_then(|value| value.trim().parse().ok())
47        .unwrap_or(default)
48}