1use super::error::Error;
2
3pub trait IntoLevelDBKey {
4 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error>;
5 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error>;
6}
7
8impl IntoLevelDBKey for &[u8] {
9 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
10 f(self)
11 }
12
13 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error> {
14 f(self)
15 }
16}
17
18impl IntoLevelDBKey for &str {
19 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
20 f(self.as_bytes())
21 }
22
23 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error> {
24 f(self.as_bytes())
25 }
26}
27
28impl IntoLevelDBKey for String {
29 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
30 f(self.as_bytes())
31 }
32
33 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error> {
34 f(self.as_bytes())
35 }
36}
37
38impl IntoLevelDBKey for Vec<u8> {
39 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
40 f(self.as_slice())
41 }
42
43 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error> {
44 f(self.as_slice())
45 }
46}
47
48macro_rules! impl_into_level_db_key_for_integer {
49 ($T: ty) => {
50 impl IntoLevelDBKey for $T {
51 fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
52 f(&self.to_be_bytes()[..])
53 }
54
55 fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) -> Result<Option<Vec<u8>>, Error>) -> Result<Option<Vec<u8>>, Error> {
56 f(&self.to_be_bytes()[..])
57 }
58 }
59 };
60}
61
62
63impl_into_level_db_key_for_integer!(i8);
64impl_into_level_db_key_for_integer!(i16);
65impl_into_level_db_key_for_integer!(i32);
66impl_into_level_db_key_for_integer!(i64);
67impl_into_level_db_key_for_integer!(i128);
68impl_into_level_db_key_for_integer!(u8);
69impl_into_level_db_key_for_integer!(u16);
70impl_into_level_db_key_for_integer!(u32);
71impl_into_level_db_key_for_integer!(u64);
72impl_into_level_db_key_for_integer!(u128);