surrealdb_core/kvs/
util.rs1use std::{ops::Range, sync::Arc};
2
3use revision::Revisioned;
4
5use crate::err::Error;
6
7use super::KeyEncode;
8
9pub fn advance_key(key: &mut [u8]) {
12 for b in key.iter_mut().rev() {
13 *b = b.wrapping_add(1);
14 if *b != 0 {
15 break;
16 }
17 }
18}
19
20pub fn to_prefix_range<K: KeyEncode>(key: K) -> Result<Range<Vec<u8>>, Error> {
21 let start = key.encode_owned()?;
22 let mut end = start.clone();
23 end.push(0xff);
24 Ok(Range {
25 start,
26 end,
27 })
28}
29
30pub fn deserialize_cache<'a, I, T>(iter: I) -> Result<Arc<[T]>, Error>
33where
34 T: Revisioned,
35 I: Iterator<Item = &'a [u8]>,
36{
37 let mut buf = Vec::new();
38 for mut slice in iter {
39 buf.push(Revisioned::deserialize_revisioned(&mut slice)?)
40 }
41 Ok(Arc::from(buf))
42}