leveldb/database/
key.rs

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);