1use crate::DatabaseError;
4use reth_db_api::table::{Decode, Decompress, Table, TableRow};
5use std::borrow::Cow;
6
7pub(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
28pub(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
41pub(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}