use bytes::Bytes;
#[inline]
pub fn namespaced(prefix: &str, key: &[u8]) -> Bytes {
let needed = prefix.len() + key.len();
if needed <= 96 {
let mut stack = [0u8; 96];
stack[..prefix.len()].copy_from_slice(prefix.as_bytes());
stack[prefix.len()..needed].copy_from_slice(key);
return Bytes::copy_from_slice(&stack[..needed]);
}
let mut buf = Vec::with_capacity(needed);
buf.extend_from_slice(prefix.as_bytes());
buf.extend_from_slice(key);
Bytes::from(buf)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_namespaced_small_key() {
let result = namespaced("prefix:", b"key");
assert_eq!(result.as_ref(), b"prefix:key");
}
#[test]
fn test_namespaced_empty_prefix() {
let result = namespaced("", b"key");
assert_eq!(result.as_ref(), b"key");
}
#[test]
fn test_namespaced_empty_key() {
let result = namespaced("prefix:", b"");
assert_eq!(result.as_ref(), b"prefix:");
}
#[test]
fn test_namespaced_large_key() {
let prefix = "prefix:";
let key = vec![b'x'; 100]; let result = namespaced(prefix, &key);
assert_eq!(result.len(), prefix.len() + 100);
assert!(result.starts_with(b"prefix:"));
}
#[test]
fn test_namespaced_exactly_96_bytes() {
let prefix = "p:";
let key = vec![b'k'; 94]; let result = namespaced(prefix, &key);
assert_eq!(result.len(), 96);
}
}