soar_db/lib.rs
1//! Database layer for the soar package manager.
2//!
3//! This crate provides database management for soar, including:
4//!
5//! - **Connection management**: Separate connections for core, metadata, and nests databases
6//! - **Models**: Diesel ORM models for all database tables
7//! - **Repositories**: Type-safe CRUD operations using the repository pattern
8//! - **Migrations**: Automatic schema migrations using diesel_migrations
9//!
10//! # Database Architecture
11//!
12//! Soar uses three types of SQLite databases:
13//!
14//! - **Core database** (`core.db`): Tracks installed packages
15//! - **Metadata databases** (one per repository): Contains package metadata
16//! - **Nests database** (`nests.db`): Stores nest configurations
17//!
18//! # Example
19//!
20//! ```ignore
21//! use soar_db::connection::DatabaseManager;
22//! use soar_db::repository::core::CoreRepository;
23//! use soar_db::repository::metadata::MetadataRepository;
24//!
25//! // Create database manager
26//! let mut manager = DatabaseManager::new("/path/to/db")?;
27//!
28//! // Add repository metadata
29//! manager.add_metadata_db("pkgforge", "/path/to/pkgforge.db")?;
30//!
31//! // Query installed packages (DbConnection derefs to SqliteConnection)
32//! let installed = CoreRepository::list_all(manager.core())?;
33//!
34//! // Search for packages
35//! if let Some(metadata) = manager.metadata("pkgforge") {
36//! let packages = MetadataRepository::search(metadata, "firefox")?;
37//! }
38//! ```
39
40pub mod connection;
41pub mod error;
42pub mod migration;
43pub mod models;
44pub mod repository;
45pub mod schema;
46
47/// Helper macro to convert `Option<serde_json::Value>` to `Option<Vec<T>>`.
48#[macro_export]
49macro_rules! json_vec {
50 ($val:expr) => {
51 $val.map(|v| serde_json::from_value(v).unwrap_or_default())
52 };
53}