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