wedb_embed 0.1.2

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use crate::{
  api::bloom::conf::{
    BloomFilterAddResult, BloomFilterInfo, BloomFilterInsertOptions, BloomInfoType,
    CuckooFilterInfo, CuckooFilterInsertOptions,
  },
  error::Result,
  traits::DbLike,
};

/// 布隆与布谷鸟过滤器结构操作接口 (Bloom / Cuckoo Filters)
pub trait Bloom: DbLike {
  fn bf_reserve<K: AsRef<[u8]>>(
    &self,
    key: K,
    error_rate: f64,
    capacity: u32,
    expansion: u16,
  ) -> Result<()>;
  fn bf_add<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn bf_madd<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
  fn bf_insert<K: AsRef<[u8]>, I: AsRef<[u8]>>(
    &self,
    key: K,
    items: &[I],
    opt: &BloomFilterInsertOptions,
  ) -> Result<Vec<BloomFilterAddResult>>;
  fn bf_exists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn bf_mexists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
  fn bf_info<K: AsRef<[u8]>>(&self, key: K) -> Result<BloomFilterInfo>;
  fn bf_info_by_type<K: AsRef<[u8]>>(
    &self,
    key: K,
    info_type: BloomInfoType,
  ) -> Result<Option<u64>>;
  fn bf_card<K: AsRef<[u8]>>(&self, key: K) -> Result<u64>;
  fn cf_reserve_ext<K: AsRef<[u8]>>(
    &self,
    key: K,
    capacity: u64,
    bucket_size: u8,
    max_iterations: u16,
    expansion: u16,
    page_size: u32,
  ) -> Result<()>;
  fn cf_reserve<K: AsRef<[u8]>>(
    &self,
    key: K,
    capacity: u64,
    bucket_size: u8,
    max_iterations: u16,
    expansion: u16,
  ) -> Result<()>;
  fn cf_add<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn cf_addnx<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn cf_insert<K: AsRef<[u8]>, I: AsRef<[u8]>>(
    &self,
    key: K,
    items: &[I],
    opt: &CuckooFilterInsertOptions,
  ) -> Result<Vec<bool>>;
  fn cf_insertnx<K: AsRef<[u8]>, I: AsRef<[u8]>>(
    &self,
    key: K,
    items: &[I],
    opt: &CuckooFilterInsertOptions,
  ) -> Result<Vec<bool>>;
  fn cf_exists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn cf_mexists<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, items: &[I]) -> Result<Vec<bool>>;
  fn cf_del<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<bool>;
  fn cf_count<K: AsRef<[u8]>, I: AsRef<[u8]>>(&self, key: K, item: I) -> Result<u64>;
  fn cf_info<K: AsRef<[u8]>>(&self, key: K) -> Result<CuckooFilterInfo>;
}