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