//! Small database table utilities and helper functions. use crate::DatabaseError; use reth_db_api::table::{Decode, Decompress, Table, TableRow}; use std::borrow::Cow; /// Helper function to decode a `(key, value)` pair. pub(crate) fn decoder<'a, T>( kv: (Cow<'a, [u8]>, Cow<'a, [u8]>), ) -> Result, DatabaseError> where T: Table, T::Key: Decode, T::Value: Decompress, { Ok(( match kv.0 { Cow::Borrowed(k) => Decode::decode(k)?, Cow::Owned(k) => Decode::decode(k)?, }, match kv.1 { Cow::Borrowed(v) => Decompress::decompress(v)?, Cow::Owned(v) => Decompress::decompress_owned(v)?, }, )) } /// Helper function to decode only a value from a `(key, value)` pair. pub(crate) fn decode_value<'a, T>( kv: (Cow<'a, [u8]>, Cow<'a, [u8]>), ) -> Result where T: Table, { Ok(match kv.1 { Cow::Borrowed(v) => Decompress::decompress(v)?, Cow::Owned(v) => Decompress::decompress_owned(v)?, }) } /// Helper function to decode a value. It can be a key or subkey. pub(crate) fn decode_one(value: Cow<'_, [u8]>) -> Result where T: Table, { Ok(match value { Cow::Borrowed(v) => Decompress::decompress(v)?, Cow::Owned(v) => Decompress::decompress_owned(v)?, }) }