Skip to main content

mdbx_derive_traits/
table.rs

1use 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}