reifydb_core/key/
transaction_version.rs1use super::{EncodableKey, KeyKind};
5use crate::{
6 EncodedKey,
7 util::encoding::keycode::{KeyDeserializer, KeySerializer},
8};
9
10#[derive(Debug, Clone, PartialEq)]
11pub struct TransactionVersionKey {}
12
13const VERSION: u8 = 1;
14
15impl EncodableKey for TransactionVersionKey {
16 const KIND: KeyKind = KeyKind::TransactionVersion;
17
18 fn encode(&self) -> EncodedKey {
19 let mut serializer = KeySerializer::with_capacity(2);
20 serializer.extend_u8(VERSION).extend_u8(Self::KIND as u8);
21 serializer.to_encoded_key()
22 }
23
24 fn decode(key: &EncodedKey) -> Option<Self> {
25 let mut de = KeyDeserializer::from_bytes(key.as_slice());
26
27 let version = de.read_u8().ok()?;
28 if version != VERSION {
29 return None;
30 }
31
32 let kind: KeyKind = de.read_u8().ok()?.try_into().ok()?;
33 if kind != Self::KIND {
34 return None;
35 }
36
37 Some(TransactionVersionKey {})
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::{EncodableKey, TransactionVersionKey};
44
45 #[test]
46 fn test_encode_decode() {
47 let key = TransactionVersionKey {};
48 let encoded = key.encode();
49 let expected = vec![
50 0xFE, 0xF4, ];
53 assert_eq!(encoded.as_slice(), expected);
54
55 TransactionVersionKey::decode(&encoded).unwrap();
56 }
57}