1use std::sync::Mutex;
2use crate::config::Config;
3use crate::connect::Connect;
4
5static 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 if DB_POOL.lock().unwrap().len() > self.max_pools {
26 continue;
27 }
28 break;
29 }
30 let mut pool = DB_POOL.lock().unwrap();
31 Ok(pool.pop().unwrap())
32 }
33}