wedb_embed 0.1.2

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

/// 有序整型数据结构操作接口 (SortedInt)
pub trait SortedInt: DbLike {
  fn si_iter<K: AsRef<[u8]>, F: FnMut(u64) -> bool>(&self, key: K, f: F) -> Result<()>;
  fn si_add<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<usize>;
  fn si_rem<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<usize>;
  fn si_card<K: AsRef<[u8]>>(&self, key: K) -> Result<u64>;
  fn si_exists<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<bool>;
  #[inline]
  fn si_ismember<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<bool> {
    self.si_exists(key, id)
  }
  fn si_mexist<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<Vec<bool>>;
  fn si_members<K: AsRef<[u8]>>(&self, key: K) -> Result<Vec<u64>>;
  fn si_range<K: AsRef<[u8]>>(
    &self,
    key: K,
    cursor: u64,
    offset: usize,
    limit: usize,
    reversed: bool,
  ) -> Result<Vec<u64>>;
  #[inline]
  fn si_rev_range<K: AsRef<[u8]>>(
    &self,
    key: K,
    cursor: u64,
    offset: usize,
    limit: usize,
  ) -> Result<Vec<u64>> {
    self.si_range(key, cursor, offset, limit, true)
  }
  fn si_range_by_value<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<Vec<u64>>;
  #[inline]
  fn si_rev_range_by_value<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<Vec<u64>> {
    let mut rev_spec = spec.clone();
    rev_spec.reversed = true;
    self.si_range_by_value(key, &rev_spec)
  }
  #[inline]
  fn si_range_by_score<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<Vec<u64>> {
    self.si_range_by_value(key, spec)
  }
  #[inline]
  fn si_rev_range_by_score<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<Vec<u64>> {
    self.si_rev_range_by_value(key, spec)
  }
  fn si_rem_range_by_value<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<usize>;
  #[inline]
  fn si_rem_range_by_score<K: AsRef<[u8]>>(
    &self,
    key: K,
    spec: &SortedintRangeSpec,
  ) -> Result<usize> {
    self.si_rem_range_by_value(key, spec)
  }
  fn si_rem_range_by_rank<K: AsRef<[u8]>>(&self, key: K, start: i64, stop: i64) -> Result<usize>;
  fn si_rank<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<Option<usize>>;
  fn si_revrank<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<Option<usize>>;
  fn si_count<K: AsRef<[u8]>>(&self, key: K, spec: &SortedintRangeSpec) -> Result<usize>;
  fn si_clear<K: AsRef<[u8]>>(&self, key: K) -> Result<usize>;
}