wedb_embed 0.1.2

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

/// 列表结构操作接口 (Lists)
pub trait List: DbLike {
  fn lpush<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
  #[inline]
  fn lpush_one<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, value: V) -> Result<u64> {
    self.lpush(key, &[value])
  }
  fn rpush<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
  #[inline]
  fn rpush_one<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, value: V) -> Result<u64> {
    self.rpush(key, &[value])
  }
  fn lpushx<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
  #[inline]
  fn lpushx_one<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, value: V) -> Result<u64> {
    self.lpushx(key, &[value])
  }
  fn rpushx<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
  #[inline]
  fn rpushx_one<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, value: V) -> Result<u64> {
    self.rpushx(key, &[value])
  }
  fn lpop<K: AsRef<[u8]>>(&self, key: K, count: usize) -> Result<Vec<Vec<u8>>>;
  #[inline]
  fn lpop_one<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<Vec<u8>>> {
    Ok(self.lpop(key, 1)?.into_iter().next())
  }
  fn rpop<K: AsRef<[u8]>>(&self, key: K, count: usize) -> Result<Vec<Vec<u8>>>;
  #[inline]
  fn rpop_one<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<Vec<u8>>> {
    Ok(self.rpop(key, 1)?.into_iter().next())
  }
  fn llen<K: AsRef<[u8]>>(&self, key: K) -> Result<u64>;
  fn lindex<K: AsRef<[u8]>>(&self, key: K, index: i64) -> Result<Option<Vec<u8>>>;
  fn lrange<K: AsRef<[u8]>>(&self, key: K, start: i64, stop: i64) -> Result<Vec<Vec<u8>>>;
  fn ltrim<K: AsRef<[u8]>>(&self, key: K, start: i64, stop: i64) -> Result<()>;
  fn lset<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, index: i64, value: V) -> Result<()>;
  fn linsert<K: AsRef<[u8]>, P: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    before: bool,
    pivot: P,
    elem: V,
  ) -> Result<i64>;
  fn lrem<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, count: i64, elem: V) -> Result<u64>;
  fn lmove<S: AsRef<[u8]>, D: AsRef<[u8]>>(
    &self,
    src: S,
    dst: D,
    src_left: bool,
    dst_left: bool,
  ) -> Result<Option<Vec<u8>>>;
  #[inline]
  fn rpoplpush<S: AsRef<[u8]>, D: AsRef<[u8]>>(&self, src: S, dst: D) -> Result<Option<Vec<u8>>> {
    self.lmove(src, dst, false, true)
  }
  fn lpos<K: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    elem: V,
    spec: PosSpec,
  ) -> Result<Vec<i64>>;
}