use conduwuit::Result; use serde::{Deserialize, Serialize}; use smallvec::SmallVec; use crate::{de, ser}; pub type KeyVal<'a, K = &'a Slice, V = &'a Slice> = (Key<'a, K>, Val<'a, V>); pub type Key<'a, T = &'a Slice> = T; pub type Val<'a, T = &'a Slice> = T; pub type KeyBuf = KeyBuffer; pub type ValBuf = ValBuffer; pub type KeyBuffer = Buffer; pub type ValBuffer = Buffer; pub type Buffer = SmallVec<[Byte; CAP]>; pub type Slice = [Byte]; pub type Byte = u8; pub const KEY_STACK_CAP: usize = 128; pub const VAL_STACK_CAP: usize = 512; pub const DEF_STACK_CAP: usize = KEY_STACK_CAP; #[inline] pub fn serialize_key(val: T) -> Result where T: Serialize, { ser::serialize_to::(val) } #[inline] pub fn serialize_val(val: T) -> Result where T: Serialize, { ser::serialize_to::(val) } #[inline] pub(crate) fn _expect_deserialize<'a, K, V>(kv: Result>) -> KeyVal<'a, K, V> where K: Deserialize<'a>, V: Deserialize<'a>, { result_deserialize(kv).expect("failed to deserialize result key/val") } #[inline] pub(crate) fn _expect_deserialize_key<'a, K>(key: Result>) -> Key<'a, K> where K: Deserialize<'a>, { result_deserialize_key(key).expect("failed to deserialize result key") } #[inline] pub(crate) fn result_deserialize<'a, K, V>(kv: Result>) -> Result> where K: Deserialize<'a>, V: Deserialize<'a>, { deserialize(kv?) } #[inline] pub(crate) fn result_deserialize_key<'a, K>(key: Result>) -> Result> where K: Deserialize<'a>, { deserialize_key(key?) } #[inline] pub(crate) fn deserialize<'a, K, V>(kv: KeyVal<'a>) -> Result> where K: Deserialize<'a>, V: Deserialize<'a>, { Ok((deserialize_key::(kv.0)?, deserialize_val::(kv.1)?)) } #[inline] pub(crate) fn deserialize_key<'a, K>(key: Key<'a>) -> Result> where K: Deserialize<'a>, { de::from_slice::(key) } #[inline] pub(crate) fn deserialize_val<'a, V>(val: Val<'a>) -> Result> where V: Deserialize<'a>, { de::from_slice::(val) } #[inline] pub fn key(kv: KeyVal<'_, K, V>) -> Key<'_, K> { kv.0 } #[inline] pub fn val(kv: KeyVal<'_, K, V>) -> Val<'_, V> { kv.1 }