mdbx_derive_traits/
table.rs1use std::borrow::Cow;
2
3use crate::error::MDBXDeriveError;
4
5pub trait TableObjectEncode {
6 fn table_encode(&self) -> Result<Vec<u8>, MDBXDeriveError>;
7}
8
9pub trait TableObjectDecode: Sized {
10 fn table_decode(val: &[u8]) -> Result<Self, MDBXDeriveError>;
11}
12
13impl TableObjectEncode for Vec<u8> {
14 fn table_encode(&self) -> Result<Vec<u8>, MDBXDeriveError> {
15 Ok(self.clone())
16 }
17}
18
19impl TableObjectDecode for Vec<u8> {
20 fn table_decode(val: &[u8]) -> Result<Self, MDBXDeriveError> {
21 Ok(val.to_vec())
22 }
23}
24
25impl TableObjectEncode for Cow<'_, [u8]> {
26 fn table_encode(&self) -> Result<Vec<u8>, MDBXDeriveError> {
27 Ok(self.clone().into_owned())
28 }
29}
30
31impl TableObjectDecode for Cow<'_, [u8]> {
32 fn table_decode(val: &[u8]) -> Result<Self, MDBXDeriveError> {
33 Ok(Self::Owned(val.to_vec()))
34 }
35}
36
37impl TableObjectDecode for () {
38 fn table_decode(val: &[u8]) -> Result<Self, MDBXDeriveError> {
39 if val.is_empty() {
40 Ok(())
41 } else {
42 Err(MDBXDeriveError::IncorrectSchema(val.to_vec()))
43 }
44 }
45}
46
47impl TableObjectEncode for () {
48 fn table_encode(&self) -> Result<Vec<u8>, MDBXDeriveError> {
49 Ok(vec![])
50 }
51}