reifydb_testing/
keyspace.rs1use reifydb_codec::key::encoded::EncodedKey;
5use reifydb_core::key::operator::{
6 keyspace::KEYSPACES,
7 state::{GroupId, KeyspaceId, OperatorStateKey},
8};
9
10pub fn suffix_width(keyspace: KeyspaceId) -> usize {
11 KEYSPACES
12 .iter()
13 .find(|spec| spec.id == keyspace)
14 .expect("a fixture keyspace must appear in the catalogue")
15 .suffix_width()
16}
17
18pub fn suffix_bytes(keyspace: KeyspaceId, seed: u64) -> Vec<u8> {
19 let width = suffix_width(keyspace);
20 assert!(
21 width >= 8 || seed >> (width * 8) == 0,
22 "seed {seed} does not fit the {width} byte suffix of {}, so distinct seeds collapse onto one key",
23 keyspace.name()
24 );
25 let mut bytes = vec![0u8; width];
26 let seed = seed.to_be_bytes();
27 let take = seed.len().min(width);
28 bytes[width - take..].copy_from_slice(&seed[seed.len() - take..]);
29 bytes
30}
31
32pub fn state_key(group: GroupId, keyspace: KeyspaceId, seed: u64) -> EncodedKey {
33 OperatorStateKey::inner_encoded(group, keyspace, suffix_bytes(keyspace, seed)).as_encoded().clone()
34}