cf-modkit-db 0.1.1

ModKit database library
Documentation

ModKit Database abstraction crate.

This crate provides a unified interface for working with different databases (SQLite, PostgreSQL, MySQL) through SQLx, with optional SeaORM integration. It emphasizes typed connection options over DSN string manipulation and implements strict security controls (e.g., SQLite PRAGMA whitelist).

Features

  • pg, mysql, sqlite: enable SQLx backends
  • sea-orm: add SeaORM integration for type-safe operations

New Architecture

The crate now supports:

  • Typed DbConnectOptions using sqlx ConnectOptions (no DSN string building)
  • Per-module database factories with configuration merging
  • SQLite PRAGMA whitelist for security
  • Environment variable expansion in passwords and DSNs

Example (DbManager API)

use modkit_db::{DbManager, GlobalDatabaseConfig, DbConnConfig};
use figment::{Figment, providers::Serialized};
use std::path::PathBuf;
use std::sync::Arc;

// Create configuration using Figment
let figment = Figment::new()
    .merge(Serialized::defaults(serde_json::json!({
        "db": {
            "servers": {
                "main": {
                    "host": "localhost",
                    "port": 5432,
                    "user": "app",
                    "password": "${DB_PASSWORD}",
                    "dbname": "app_db"
                }
            }
        },
        "test_module": {
            "database": {
                "server": "main",
                "dbname": "module_db"
            }
        }
    })));

// Create DbManager
let home_dir = PathBuf::from("/app/data");
let db_manager = Arc::new(DbManager::from_figment(figment, home_dir).unwrap());

// Use in runtime with DbOptions::Manager(db_manager)
// Modules can then use: ctx.db_required_async().await?