Skip to main content

reifydb_testing/
keyspace.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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}