reth_db/tables/
utils.rs

1//! Small database table utilities and helper functions.
2
3use crate::DatabaseError;
4use reth_db_api::table::{Decode, Decompress, Table, TableRow};
5use std::borrow::Cow;
6
7/// Helper function to decode a `(key, value)` pair.
8pub(crate) fn decoder<'a, T>(
9    (k, v): (Cow<'a, [u8]>, Cow<'a, [u8]>),
10) -> Result<TableRow<T>, DatabaseError>
11where
12    T: Table,
13    T::Key: Decode,
14    T::Value: Decompress,
15{
16    Ok((
17        match k {
18            Cow::Borrowed(k) => Decode::decode(k)?,
19            Cow::Owned(k) => Decode::decode_owned(k)?,
20        },
21        match v {
22            Cow::Borrowed(v) => Decompress::decompress(v)?,
23            Cow::Owned(v) => Decompress::decompress_owned(v)?,
24        },
25    ))
26}
27
28/// Helper function to decode only a value from a `(key, value)` pair.
29pub(crate) fn decode_value<'a, T>(
30    kv: (Cow<'a, [u8]>, Cow<'a, [u8]>),
31) -> Result<T::Value, DatabaseError>
32where
33    T: Table,
34{
35    Ok(match kv.1 {
36        Cow::Borrowed(v) => Decompress::decompress(v)?,
37        Cow::Owned(v) => Decompress::decompress_owned(v)?,
38    })
39}
40
41/// Helper function to decode a value. It can be a key or subkey.
42pub(crate) fn decode_one<T>(value: Cow<'_, [u8]>) -> Result<T::Value, DatabaseError>
43where
44    T: Table,
45{
46    Ok(match value {
47        Cow::Borrowed(v) => Decompress::decompress(v)?,
48        Cow::Owned(v) => Decompress::decompress_owned(v)?,
49    })
50}