use sqlx::postgres::PgPool;
use crate::features::connection_pooler::{ConnectionPool, ConnectionPoolManager};
impl ConnectionPool {
pub(crate) fn wrap(client_name: String, pool: PgPool, manager: ConnectionPoolManager) -> Self {
Self {
client_name,
pool,
manager,
}
}
pub async fn open(
client_name: String,
uri: &str,
manager: &ConnectionPoolManager,
) -> Result<Self, sqlx::Error> {
manager.open(client_name, uri).await
}
pub fn client_name(&self) -> &str {
&self.client_name
}
pub fn pg_pool(&self) -> &PgPool {
&self.pool
}
pub fn manager(&self) -> &ConnectionPoolManager {
&self.manager
}
pub async fn close(self) {
self.pool.close().await;
}
pub async fn reconfigure(
&mut self,
uri: &str,
manager: ConnectionPoolManager,
) -> Result<(), sqlx::Error> {
let replacement = manager.open(self.client_name.clone(), uri).await?;
let previous = std::mem::replace(&mut self.pool, replacement.pool);
self.manager = manager;
previous.close().await;
Ok(())
}
}