dusk_node/database/rocksdb/
metadata_indexes.rs1use super::*;
8impl<DB: DBAccess> Metadata for DBTransaction<'_, DB> {
9 fn op_write<T: AsRef<[u8]>>(&mut self, key: &[u8], value: T) -> Result<()> {
10 self.put_cf(self.metadata_cf, key, value)?;
11 Ok(())
12 }
13
14 fn op_read(&self, key: &[u8]) -> Result<Option<Vec<u8>>> {
15 self.inner.get_cf(self.metadata_cf, key).map_err(Into::into)
16 }
17}
18
19pub(super) fn serialize_key(
20 value: u64,
21 hash: [u8; 32],
22) -> std::io::Result<Vec<u8>> {
23 let mut w = vec![];
24 std::io::Write::write_all(&mut w, &value.to_be_bytes())?;
25 std::io::Write::write_all(&mut w, &hash)?;
26 Ok(w)
27}
28
29pub(super) fn deserialize_key<R: Read>(r: &mut R) -> Result<(u64, [u8; 32])> {
30 let mut buf = [0u8; 8];
31 r.read_exact(&mut buf)?;
32 let value = u64::from_be_bytes(buf);
33 let mut hash = [0u8; 32];
34 r.read_exact(&mut hash[..])?;
35
36 Ok((value, hash))
37}
38
39pub(super) fn serialize_iter_key(
40 ch: &ConsensusHeader,
41) -> std::io::Result<Vec<u8>> {
42 let mut w = vec![];
43 std::io::Write::write_all(&mut w, &ch.prev_block_hash)?;
44 std::io::Write::write_all(&mut w, &[ch.iteration])?;
45 Ok(w)
46}
47
48pub(super) fn deserialize_iter_key<R: Read>(
49 r: &mut R,
50) -> Result<([u8; 32], u8)> {
51 let mut prev_block_hash = [0u8; 32];
52 r.read_exact(&mut prev_block_hash)?;
53
54 let mut iter_byte = [0u8; 1];
55 r.read_exact(&mut iter_byte)?;
56 let iteration = u8::from_be_bytes(iter_byte);
57
58 Ok((prev_block_hash, iteration))
59}