wedb_embed 0.1.1

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
/// 为复合数据类型生成带前缀的 expire/ttl/persist 转发方法
///
/// 仅做前缀命名转发,核心逻辑在 `WeDb` 泛型函数中
///
/// # 参数
/// - `prefix`:       方法名前缀(如 `s`, `l`)
/// - `meta_type`:    实现了 MetaOps 的 meta 类型
/// - `meta_key_fn`:  构造 meta key 的函数
macro_rules! impl_expire_ops {
    (
        prefix = $prefix:ident,
        meta_type = $meta_type:ty
    ) => {
        ::paste::paste! {
            #[inline]
            pub fn [<$prefix expireat>]<K: AsRef<[u8]>>(&self, key: K, expire_at_ms: u64) -> $crate::error::Result<bool> {
                self.expireat_generic::<$meta_type>(key.as_ref(), expire_at_ms)
            }

            #[inline]
            pub fn [<$prefix expire>]<K: AsRef<[u8]>>(&self, key: K, seconds: u64) -> $crate::error::Result<bool> {
                let ms = $crate::meta::current_now_ms().saturating_add(seconds.saturating_mul(1000));
                self.[<$prefix expireat>](key, ms)
            }

            #[inline]
            pub fn [<$prefix pexpireat>]<K: AsRef<[u8]>>(&self, key: K, expire_at_ms: u64) -> $crate::error::Result<bool> {
                self.[<$prefix expireat>](key, expire_at_ms)
            }

            #[inline]
            pub fn [<$prefix pexpire>]<K: AsRef<[u8]>>(&self, key: K, milliseconds: u64) -> $crate::error::Result<bool> {
                let ms = $crate::meta::current_now_ms().saturating_add(milliseconds);
                self.[<$prefix expireat>](key, ms)
            }

            #[inline]
            pub fn [<$prefix ttl>]<K: AsRef<[u8]>>(&self, key: K) -> $crate::error::Result<i64> {
                self.ttl_generic::<$meta_type>(key.as_ref())
            }

            #[inline]
            pub fn [<$prefix pttl>]<K: AsRef<[u8]>>(&self, key: K) -> $crate::error::Result<i64> {
                self.pttl_generic::<$meta_type>(key.as_ref())
            }

            #[inline]
            pub fn [<$prefix expiretime>]<K: AsRef<[u8]>>(&self, key: K) -> $crate::error::Result<i64> {
                self.expiretime_generic::<$meta_type>(key.as_ref())
            }

            #[inline]
            pub fn [<$prefix pexpiretime>]<K: AsRef<[u8]>>(&self, key: K) -> $crate::error::Result<i64> {
                self.pexpiretime_generic::<$meta_type>(key.as_ref())
            }

            #[inline]
            pub fn [<$prefix persist>]<K: AsRef<[u8]>>(&self, key: K) -> $crate::error::Result<bool> {
                self.persist_generic::<$meta_type>(key.as_ref())
            }
        }
    };
}