burncloud-database-client 0.1.1

High-level database client with migrations, pooling, and AI model management for BurnCloud
Documentation
use burncloud_database_core::{
    DatabaseConfig, DatabaseType, DatabaseConnection, QueryExecutor
};
use burncloud_database_core::error::{DatabaseResult, DatabaseError};
use std::sync::Arc;

#[cfg(feature = "postgres")]
use burncloud_database_impl::PostgresConnection;

#[cfg(feature = "mysql")]
use burncloud_database_impl::MySQLConnection;

#[cfg(feature = "sqlite")]
use burncloud_database_impl::SQLiteConnection;

#[cfg(feature = "mongodb")]
use burncloud_database_impl::MongoDBConnection;

pub struct DatabaseClientFactory;

impl DatabaseClientFactory {
    pub fn create_connection(config: &DatabaseConfig) -> DatabaseResult<Box<dyn DatabaseConnection>> {
        match config.database_type {
            #[cfg(feature = "postgres")]
            DatabaseType::Postgres => {
                let connection_string = format!(
                    "postgresql://{}:{}@{}:{}/{}",
                    config.username, config.password, config.host, config.port, config.database
                );
                Ok(Box::new(PostgresConnection::new(connection_string)))
            }

            #[cfg(feature = "mysql")]
            DatabaseType::MySQL => {
                let connection_string = format!(
                    "mysql://{}:{}@{}:{}/{}",
                    config.username, config.password, config.host, config.port, config.database
                );
                Ok(Box::new(MySQLConnection::new(connection_string)))
            }

            #[cfg(feature = "sqlite")]
            DatabaseType::SQLite => {
                Ok(Box::new(SQLiteConnection::new(config.database.clone())))
            }

            #[cfg(feature = "mongodb")]
            DatabaseType::MongoDB => {
                let connection_string = format!(
                    "mongodb://{}:{}@{}:{}",
                    config.username, config.password, config.host, config.port
                );
                Ok(Box::new(MongoDBConnection::new(connection_string, config.database.clone())))
            }

            _ => Err(DatabaseError::ConfigurationError(
                format!("Unsupported database type: {:?}", config.database_type)
            ))
        }
    }

    pub fn create_query_executor(config: &DatabaseConfig) -> DatabaseResult<Box<dyn QueryExecutor>> {
        match config.database_type {
            #[cfg(feature = "postgres")]
            DatabaseType::Postgres => {
                let connection_string = format!(
                    "postgresql://{}:{}@{}:{}/{}",
                    config.username, config.password, config.host, config.port, config.database
                );
                Ok(Box::new(PostgresConnection::new(connection_string)))
            }

            #[cfg(feature = "mysql")]
            DatabaseType::MySQL => {
                let connection_string = format!(
                    "mysql://{}:{}@{}:{}/{}",
                    config.username, config.password, config.host, config.port, config.database
                );
                Ok(Box::new(MySQLConnection::new(connection_string)))
            }

            #[cfg(feature = "sqlite")]
            DatabaseType::SQLite => {
                Ok(Box::new(SQLiteConnection::new(config.database.clone())))
            }

            #[cfg(feature = "mongodb")]
            DatabaseType::MongoDB => {
                let connection_string = format!(
                    "mongodb://{}:{}@{}:{}",
                    config.username, config.password, config.host, config.port
                );
                Ok(Box::new(MongoDBConnection::new(connection_string, config.database.clone())))
            }

            _ => Err(DatabaseError::ConfigurationError(
                format!("Unsupported database type: {:?}", config.database_type)
            ))
        }
    }
}