use wdev::Device;
use wval::{KeyTag, NamespaceDbCodec, TaggedKeyBuf};
use crate::session::StoreSession;
impl<D: Device> StoreSession<D> {
#[inline(always)]
pub fn session_meta_key(&self, user_key: &[u8]) -> TaggedKeyBuf {
let prefix = self.session_prefix();
NamespaceDbCodec::encode_with_session_prefix(prefix.as_slice(), KeyTag::Meta, user_key)
}
#[inline(always)]
pub fn session_string_key(&self, user_key: &[u8]) -> TaggedKeyBuf {
let prefix = self.session_prefix();
NamespaceDbCodec::encode_with_session_prefix(prefix.as_slice(), KeyTag::String, user_key)
}
#[inline(always)]
pub fn meta_key(user_key: &[u8]) -> TaggedKeyBuf {
NamespaceDbCodec::encode_meta_key(0, 0, user_key)
}
#[inline(always)]
pub fn chunk_key(&self, tag: KeyTag, key_id: u64, version: u64, chunk_id: u32) -> TaggedKeyBuf {
let prefix = self.session_prefix();
NamespaceDbCodec::encode_chunk_key_with_prefix(
prefix.as_slice(),
tag,
key_id,
version,
chunk_id,
)
}
#[inline]
pub fn user_key_from_ttl_key(key: &[u8]) -> Option<(u64, u64, &[u8])> {
let (ns, db, tag, user_key) = NamespaceDbCodec::decode_tagged_key(key).ok()?;
(tag == KeyTag::Ttl).then_some((ns, db, user_key))
}
}