1use std::sync::Mutex;
2use crate::config::Config;
3use crate::connect::Connect;
4
5pub(crate) static DB_POOL: std::sync::LazyLock<Mutex<Vec<Connect>>> = std::sync::LazyLock::new(|| Mutex::new(Vec::new()));
6
7#[derive(Clone)]
8pub struct Pools {
9 pub config: Config,
11 max_pools: usize,
13}
14
15impl Pools {
16 pub fn new(config: Config, size: usize) -> Result<Self, String> {
17 for _ in 0..size {
18 let client = Connect::new(config.clone())?;
19 DB_POOL.lock().unwrap().push(client);
20 }
21 Ok(Self { config, max_pools: size })
22 }
23 pub fn get_connect(&mut self) -> Result<Connect, String> {
24 loop {
25 let mut pool = DB_POOL.lock().unwrap();
26 if pool.is_empty() {
28 } else if pool.len() <= self.max_pools {
30 return Ok(pool.pop().unwrap());
31 }
32 }
33 }
34}