1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
pub fn key_prefix(namespace: &[u8]) -> Vec<u8> {
let mut out = Vec::with_capacity(namespace.len() + 2);
extend_with_prefix(&mut out, namespace);
out
}
pub fn key_prefix_nested(namespaces: &[&[u8]]) -> Vec<u8> {
let mut size = namespaces.len();
for &namespace in namespaces {
size += namespace.len() + 2;
}
let mut out = Vec::with_capacity(size);
for &namespace in namespaces {
extend_with_prefix(&mut out, namespace);
}
out
}
fn extend_with_prefix(out: &mut Vec<u8>, namespace: &[u8]) {
out.extend_from_slice(&key_len(namespace));
out.extend_from_slice(namespace);
}
fn key_len(prefix: &[u8]) -> [u8; 2] {
if prefix.len() > 0xFFFF {
panic!("only supports namespaces up to length 0xFFFF")
}
let length_bytes = (prefix.len() as u64).to_be_bytes();
[length_bytes[6], length_bytes[7]]
}