iridium-db 0.3.0

A high-performance vector-graph hybrid storage and indexing engine
use std::path::Path;

use iridium::features::storage::api;

pub(super) fn open_store_with_data_root(
    data_root: Option<&Path>,
) -> api::Result<api::StorageHandle> {
    let data_dir = if let Some(path) = data_root {
        path.to_path_buf()
    } else {
        let base_dir = std::env::current_dir().map_err(api::StorageError::from)?;
        base_dir.join("data")
    };
    let wal_dir = data_dir.join("wal");
    let manifest_path = data_dir.join("ir.manifest");
    let sstable_dir = data_dir.join("sst");

    api::open_store(api::StorageConfig {
        buffer_pool_pages: 1024,
        wal_dir,
        wal_segment_max_bytes: 1 << 20,
        manifest_path,
        sstable_dir,
    })
}

pub(super) fn env_u64_or(key: &str, default: u64) -> u64 {
    std::env::var(key)
        .ok()
        .and_then(|v| v.parse::<u64>().ok())
        .unwrap_or(default)
}

pub(super) fn env_usize_or(key: &str, default: usize) -> usize {
    std::env::var(key)
        .ok()
        .and_then(|v| v.parse::<usize>().ok())
        .unwrap_or(default)
}