use crate::key_composer::{KeyComposer, KeyTag, SmallKey, SubkeyComposer};
#[inline]
pub fn meta(kc: &KeyComposer<'_>, key: &[u8]) -> SmallKey {
kc.compose_meta_key_stack(KeyTag::ListMeta.as_slice(), key)
}
#[inline]
pub fn prefix_stack(kc: &KeyComposer<'_>, key: &[u8]) -> SmallKey {
kc.compose_prefix_stack(KeyTag::ListData.as_slice(), key)
}
#[inline]
pub fn prefix(kc: &KeyComposer<'_>, key: &[u8]) -> Vec<u8> {
kc.compose_prefix(KeyTag::ListData.as_slice(), key)
}
#[inline]
pub fn item(kc: &KeyComposer<'_>, key: &[u8], idx: u64) -> SmallKey {
kc.compose_subkey_stack(KeyTag::ListData.as_slice(), key, &idx.to_be_bytes())
}
#[derive(Debug, Clone)]
pub struct ItemKeyComposer {
composer: SubkeyComposer,
}
impl ItemKeyComposer {
#[inline]
pub fn new(kc: &KeyComposer<'_>, key: &[u8]) -> Self {
let p = prefix_stack(kc, key);
Self {
composer: SubkeyComposer::from_slice(&p),
}
}
#[inline(always)]
pub fn key_for_idx(&mut self, idx: u64) -> &[u8] {
self.composer.compose_sub_u64_be(idx)
}
#[inline(always)]
pub fn prefix(&self) -> &[u8] {
self.composer.prefix()
}
}