wedb_embed 0.1.2

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use crate::{
  api::hash::{
    HashFieldPair, HashRandField, HashScanResult,
    conf::{
      HExpire, HGetEx, HSetEx, HashFetchType, HashGetExOptions, HashLengthMode, HashSetExOptions,
      RangeLexSpec,
    },
  },
  error::Result,
  traits::DbLike,
};

/// 哈希结构操作接口 (Hashes)
pub trait Hash: DbLike {
  fn hget<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, field: F) -> Result<Option<Vec<u8>>>;
  fn hset<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[(F, V)],
  ) -> Result<usize>;
  fn hdel<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<usize>;
  fn hexists<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, field: F) -> Result<bool>;
  fn hlen<K: AsRef<[u8]>>(&self, key: K) -> Result<usize>;
  fn hlen_with_mode<K: AsRef<[u8]>>(&self, key: K, mode: HashLengthMode) -> Result<usize>;
  fn hgetall<K: AsRef<[u8]>>(&self, key: K) -> Result<Vec<(Vec<u8>, Vec<u8>)>>;
  fn hget_all_with_type<K: AsRef<[u8]>>(
    &self,
    key: K,
    fetch_type: HashFetchType,
  ) -> Result<Vec<(Vec<u8>, Vec<u8>)>>;
  fn hkeys<K: AsRef<[u8]>>(&self, key: K) -> Result<Vec<Vec<u8>>>;
  fn hvals<K: AsRef<[u8]>>(&self, key: K) -> Result<Vec<Vec<u8>>>;
  fn hincrby<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, field: F, step: i64) -> Result<i64>;
  fn hincrbyfloat<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    field: F,
    step: f64,
  ) -> Result<f64>;
  fn hmget<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
  ) -> Result<Vec<Option<Vec<u8>>>>;
  fn hmset<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[(F, V)],
  ) -> Result<()>;
  fn hstrlen<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, field: F) -> Result<usize>;
  fn hiter<K: AsRef<[u8]>, F>(&self, key: K, f: F) -> Result<()>
  where
    F: FnMut(&[u8], &[u8]) -> bool;
  fn hsetnx<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    field: F,
    val: V,
  ) -> Result<bool>;
  fn hrandfield<K: AsRef<[u8]>>(
    &self,
    key: K,
    count: i64,
    with_values: bool,
  ) -> Result<Vec<HashRandField>>;
  fn hscan<K: AsRef<[u8]>>(
    &self,
    key: K,
    cursor: usize,
    limit: usize,
    pattern: Option<&[u8]>,
  ) -> Result<HashScanResult>;

  fn hexpire<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    seconds: i64,
    condition: HExpire,
  ) -> Result<Vec<i64>>;
  fn hpexpire<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    milliseconds: i64,
    condition: HExpire,
  ) -> Result<Vec<i64>>;
  fn hexpireat<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    unix_time_sec: u64,
    condition: HExpire,
  ) -> Result<Vec<i64>>;
  fn hpexpireat<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    unix_time_ms: u64,
    condition: HExpire,
  ) -> Result<Vec<i64>>;
  fn expire_fields<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    expire_at_ms: u64,
    condition: HExpire,
    now_ms: u64,
  ) -> Result<Vec<i64>>;
  fn httl<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<Vec<i64>>;
  fn hpttl<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<Vec<i64>>;
  fn hexpiretime<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<Vec<i64>>;
  fn hpexpiretime<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<Vec<i64>>;
  fn hpersist<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<Vec<i64>>;
  fn hgetdel<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
  ) -> Result<Vec<Option<Vec<u8>>>>;
  fn hsetex<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    field_vals: &[(F, V)],
    flags: &[HSetEx],
  ) -> Result<bool>;
  fn set_fields_with_expire<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
    &self,
    key: K,
    field_values: &[(F, V)],
    options: HashSetExOptions,
  ) -> Result<bool>;
  fn hgetex<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    field: F,
    flag: Option<HGetEx>,
  ) -> Result<Option<Vec<u8>>>;
  fn get_fields_with_expire<K: AsRef<[u8]>, F: AsRef<[u8]>>(
    &self,
    key: K,
    fields: &[F],
    options: HashGetExOptions,
  ) -> Result<Vec<Option<Vec<u8>>>>;
  fn hrangebylex<K: AsRef<[u8]>>(&self, key: K, spec: RangeLexSpec) -> Result<Vec<HashFieldPair>>;
}