use std::sync::Arc; use deadpool_postgres::{Pool, Config, Runtime}; use tokio::sync::OnceCell; use tokio_postgres::NoTls; use crate::config::get_config; static CONNECTION_POOL: OnceCell> = OnceCell::const_new(); async fn initialize_data() -> Arc { let config = get_config().await; let mut pg = Config::new(); pg.host = Some(config.database.host.clone()); pg.user = Some(config.database.user.clone()); pg.password = Some(config.database.password.clone()); pg.dbname = Some(config.database.name.clone()); pg.port = Some(config.database.port as u16); let pool = pg.create_pool(Some(Runtime::Tokio1), NoTls).unwrap(); Arc::new(pool) } pub async fn get_connection_pool() -> Arc { CONNECTION_POOL.get_or_init(initialize_data) .await .clone() }