wedb_embed 0.1.2

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use crate::{
  api::{
    geo::conf::{
      GeoPoint, GeoRadiusOption, GeoSearch, GeoSearchStoreOption, GeoShape, OriginPoint,
    },
    key::Key,
    zset::{conf::ZAdd, traits::ZSet},
  },
  error::Result,
};

/// 地理空间索引接口 (GEO)
pub trait Geo: ZSet + Key {
  fn geoadd<K: AsRef<[u8]>, M: AsRef<[u8]>>(
    &self,
    key: K,
    items: &[(f64, f64, M)],
  ) -> Result<usize>;

  fn geoadd_opts<K: AsRef<[u8]>, M: AsRef<[u8]>>(
    &self,
    key: K,
    items: &[(f64, f64, M)],
    options: impl AsRef<[ZAdd]>,
  ) -> Result<usize>;

  fn geodist<K: AsRef<[u8]>, M1: AsRef<[u8]>, M2: AsRef<[u8]>>(
    &self,
    key: K,
    member1: M1,
    member2: M2,
    unit: Option<&str>,
  ) -> Result<Option<f64>>;

  fn geopos<K: AsRef<[u8]>, M: AsRef<[u8]>>(
    &self,
    key: K,
    members: &[M],
  ) -> Result<Vec<Option<(f64, f64)>>>;

  fn geohash<K: AsRef<[u8]>, M: AsRef<[u8]>>(
    &self,
    key: K,
    members: &[M],
  ) -> Result<Vec<Option<String>>>;

  fn georadius<K: AsRef<[u8]>>(
    &self,
    key: K,
    longitude: f64,
    latitude: f64,
    radius: f64,
    opt: &GeoRadiusOption,
  ) -> Result<Vec<GeoPoint>>;

  fn georadiusbymember<K: AsRef<[u8]>, M: AsRef<[u8]>>(
    &self,
    key: K,
    member: M,
    radius: f64,
    opt: &GeoRadiusOption,
  ) -> Result<Vec<GeoPoint>>;

  fn geosearch<K: AsRef<[u8]>>(
    &self,
    key: K,
    origin: &OriginPoint,
    shape: &mut GeoShape,
    opt: &GeoSearch,
  ) -> Result<Vec<GeoPoint>>;

  fn geosearchstore<K: AsRef<[u8]>, D: AsRef<[u8]>>(
    &self,
    destination: D,
    source: K,
    origin: &OriginPoint,
    shape: &mut GeoShape,
    opt: &GeoSearchStoreOption,
  ) -> Result<usize>;
}