wedb_embed 0.1.1

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
/// 嵌入式数据库配置
#[derive(Debug, Clone, bitcode::Encode, bitcode::Decode)]
pub struct Conf {
    pub data_path: String,
    pub cache_size: Option<usize>,
    pub compression: Option<String>,
    pub journal_compression: Option<String>,
    pub manual_journal_persist: Option<bool>,
    pub worker_threads: Option<usize>,
    pub max_journaling_size: Option<usize>,
    pub max_cached_files: Option<usize>,
}

impl Conf {
    #[inline]
    pub fn new(data_path: impl Into<String>) -> Self {
        Self {
            data_path: data_path.into(),
            ..Default::default()
        }
    }
}

impl Default for Conf {
    fn default() -> Self {
        Self {
            data_path: "./data".to_string(),
            cache_size: Some(512 * 1024 * 1024),
            compression: Some("lz4".to_string()),
            journal_compression: Some("none".to_string()),
            manual_journal_persist: Some(false),
            worker_threads: None,
            max_journaling_size: None,
            max_cached_files: None,
        }
    }
}

/// 解析压缩算法配置(支持 lz4 / none 等别名,零堆分配)
#[inline]
pub fn parse_compression_type(
    comp: Option<&str>,
    default: fjall::CompressionType,
) -> fjall::CompressionType {
    if let Some(s) = comp {
        let trimmed = s.trim();
        if trimmed.eq_ignore_ascii_case("none")
            || trimmed.eq_ignore_ascii_case("off")
            || trimmed.eq_ignore_ascii_case("disabled")
            || trimmed.eq_ignore_ascii_case("false")
            || trimmed == "0"
        {
            fjall::CompressionType::None
        } else if trimmed.eq_ignore_ascii_case("lz4")
            || trimmed.eq_ignore_ascii_case("on")
            || trimmed.eq_ignore_ascii_case("enabled")
            || trimmed.eq_ignore_ascii_case("true")
            || trimmed == "1"
        {
            fjall::CompressionType::Lz4
        } else {
            default
        }
    } else {
        default
    }
}