use crate::key_composer::{
oppv::encode_oppv_u64,
tag::{SysMetaTag, SystemDomainTag},
};
pub const DEFAULT_NAMESPACE: &str = "default";
pub const NS_NAME_PREFIX: &[u8] = &[0, SystemDomainTag::SysMeta as u8, SysMetaTag::NsName as u8];
pub const NS_ID_PREFIX: &[u8] = &[0, SystemDomainTag::SysMeta as u8, SysMetaTag::NsId as u8];
pub const NS_NEXT_ID_KEY: &[u8] = &[
0,
SystemDomainTag::SysMeta as u8,
SysMetaTag::NsNextId as u8,
];
pub const NS_TOKEN_PREFIX: &[u8] = &[0, SystemDomainTag::SysMeta as u8, SysMetaTag::NsToken as u8];
pub const CATALOG_PREFIX: &[u8] = &[0, SystemDomainTag::Catalog as u8];
#[inline]
pub fn ns_name_key(ns: impl AsRef<[u8]>) -> Vec<u8> {
let ns_bytes = ns.as_ref();
let mut v = Vec::with_capacity(NS_NAME_PREFIX.len() + ns_bytes.len());
v.extend_from_slice(NS_NAME_PREFIX);
v.extend_from_slice(ns_bytes);
v
}
#[inline]
pub fn ns_id_key(id: u64) -> Vec<u8> {
let mut v = Vec::with_capacity(NS_ID_PREFIX.len() + 9);
v.extend_from_slice(NS_ID_PREFIX);
encode_oppv_u64(id, &mut v);
v
}
#[inline]
pub fn ns_token_key(token: impl AsRef<[u8]>) -> Vec<u8> {
let token_bytes = token.as_ref();
let mut v = Vec::with_capacity(NS_TOKEN_PREFIX.len() + token_bytes.len());
v.extend_from_slice(NS_TOKEN_PREFIX);
v.extend_from_slice(token_bytes);
v
}
#[inline]
pub fn catalog_ns_prefix(ns: impl AsRef<[u8]>) -> Vec<u8> {
let ns_bytes = ns.as_ref();
let mut v = Vec::with_capacity(CATALOG_PREFIX.len() + 9 + ns_bytes.len());
v.extend_from_slice(CATALOG_PREFIX);
encode_oppv_u64(ns_bytes.len() as u64, &mut v);
v.extend_from_slice(ns_bytes);
v
}
#[inline]
pub fn catalog_db_key(ns: impl AsRef<[u8]>, db_idx: u64) -> Vec<u8> {
let ns_bytes = ns.as_ref();
let mut v = Vec::with_capacity(CATALOG_PREFIX.len() + 9 + ns_bytes.len() + 9);
v.extend_from_slice(CATALOG_PREFIX);
encode_oppv_u64(ns_bytes.len() as u64, &mut v);
v.extend_from_slice(ns_bytes);
encode_oppv_u64(db_idx, &mut v);
v
}
#[inline]
pub fn is_default_namespace(ns: &str) -> bool {
ns == DEFAULT_NAMESPACE || ns == "0" || ns == "db0" || ns.is_empty()
}
#[inline]
pub fn is_default_namespace_bytes(ns: &[u8]) -> bool {
ns == DEFAULT_NAMESPACE.as_bytes() || ns == b"0" || ns == b"db0" || ns.is_empty()
}