reth_db/implementation/mdbx/
utils.rs

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