soma_codemode/pool/
config.rs1pub 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}