vornix-core 0.1.0

Librería de utilidades para microservicios en Rust, incluyendo conexión asincrónica a bases de datos, manejo de respuestas y más.
Documentation
use std::sync::Arc;
use diesel_async::{pooled_connection::{deadpool::Pool, AsyncDieselConnectionManager}, AsyncPgConnection};
use log::{error, info};
use thiserror::Error;
use diesel::result::Error as DieselError;
use deadpool::managed::Object;

pub type DbPool = Arc<Pool<diesel_async::AsyncPgConnection>>;

#[derive(Error, Debug)]
pub enum DatabaseError {
    #[error("Error al construir el pool de conexiones: {0}")]
    PoolCreationError(String),
}

pub async fn async_connection(database_url: &str) -> Result<DbPool, DatabaseError> {
    let config =
        AsyncDieselConnectionManager::<diesel_async::AsyncPgConnection>::new(database_url);
    match Pool::builder(config).max_size(16).build() {
        Ok(pool) => {
            info!("Conexión al pool de base de datos exitosa."); // Log para éxito
            Ok(Arc::new(pool))
        }
        Err(e) => {
            error!("Error al conectar al pool de base de datos: {}", e); // Log para error
            Err(DatabaseError::PoolCreationError(e.to_string()))
        }
    }
}

/// Obtiene una conexión del pool.
pub async fn get_connection(
    pool: DbPool,
) -> Result<Object<AsyncDieselConnectionManager<AsyncPgConnection>>, DieselError> {
    pool.get()
        .await
        .map_err(|_| DieselError::NotFound) // Manejo de errores
}