#![allow(unused_features)] // 1.96.0-nightly 2026-03-07 bug extern crate rust_rocksdb as rocksdb; tuwunel_core::mod_ctor! {} tuwunel_core::mod_dtor! {} tuwunel_core::rustc_flags_capture! {} mod cork; mod de; mod deserialized; mod engine; mod handle; pub mod keyval; mod map; pub mod maps; mod pool; mod ser; mod stream; #[cfg(test)] mod tests; pub(crate) mod util; use std::{ops::Index, sync::Arc}; use log as _; use tuwunel_core::{Result, Server, err}; pub use self::{ de::{Ignore, IgnoreAll}, deserialized::Deserialized, handle::Handle, keyval::{KeyVal, Slice, serialize_key, serialize_val}, map::{Get, Map, Qry, compact}, ser::{Cbor, Interfix, Json, SEP, Separator, serialize, serialize_to, serialize_to_vec}, }; pub(crate) use self::{ engine::{Engine, context::Context}, util::or_else, }; use crate::maps::{Maps, MapsKey, MapsVal}; pub struct Database { maps: Maps, pub engine: Arc, pub(crate) _ctx: Arc, } impl Database { /// Load an existing database or create a new one. pub async fn open(server: &Arc) -> Result> { let ctx = Context::new(server)?; let engine = Engine::open(ctx.clone(), maps::MAPS).await?; Ok(Arc::new(Self { maps: maps::open(&engine)?, engine: engine.clone(), _ctx: ctx, })) } #[inline] pub fn get(&self, name: &str) -> Result<&Arc> { self.maps .get(name) .ok_or_else(|| err!(Request(NotFound("column not found")))) } #[inline] pub fn iter(&self) -> impl Iterator + Send + '_ { self.maps.iter() } #[inline] pub fn keys(&self) -> impl Iterator + Send + '_ { self.maps.keys() } #[inline] #[must_use] pub fn is_read_only(&self) -> bool { self.engine.is_read_only() } #[inline] #[must_use] pub fn is_secondary(&self) -> bool { self.engine.is_secondary() } } impl Index<&str> for Database { type Output = Arc; fn index(&self, name: &str) -> &Self::Output { self.maps .get(name) .expect("column in database does not exist") } }