text_document_common/database/
db_context.rs1use crate::direct_access::setup::initialize_all_tables;
4use crate::error::RepositoryError;
5use redb::Database;
6use std::sync::Arc;
7
8#[derive(Clone, Debug)]
9pub struct DbContext {
10 database: Arc<Database>,
11}
12
13impl DbContext {
14 pub fn new() -> Result<Self, RepositoryError> {
15 let db = DbContext::create_db_in_memory()?;
16
17 let write_txn = db.begin_write()?;
19 initialize_all_tables(&write_txn)?;
20 write_txn.commit()?;
21
22 Ok(DbContext {
23 database: Arc::new(db),
24 })
25 }
26
27 fn create_db_in_memory() -> Result<Database, RepositoryError> {
28 let redb_builder = redb::Builder::new();
29 let in_memory_backend = redb::backends::InMemoryBackend::new();
30 let db = redb_builder.create_with_backend(in_memory_backend)?;
31 Ok(db)
32 }
33
34 pub fn get_database(&self) -> &Database {
35 &self.database
36 }
37}