tantivy_sstable/value/
mod.rs1pub(crate) mod index;
2mod range;
3mod u64_monotonic;
4mod void;
5
6use std::io;
7
8pub trait ValueReader: Default {
11 type Value;
13
14 fn value(&self, idx: usize) -> &Self::Value;
17
18 fn load(&mut self, data: &[u8]) -> io::Result<usize>;
22}
23
24pub trait ValueWriter: Default {
27 type Value;
29
30 fn write(&mut self, val: &Self::Value);
34
35 fn serialize_block(&self, output: &mut Vec<u8>);
37
38 fn clear(&mut self);
41}
42
43pub use range::{RangeValueReader, RangeValueWriter};
44pub use u64_monotonic::{U64MonotonicValueReader, U64MonotonicValueWriter};
45pub use void::{VoidValueReader, VoidValueWriter};
46
47fn deserialize_vint_u64(data: &mut &[u8]) -> u64 {
48 let (num_bytes, val) = super::vint::deserialize_read(data);
49 *data = &data[num_bytes..];
50 val
51}
52
53#[cfg(test)]
54pub(crate) mod tests {
55 use std::fmt;
56
57 use super::{ValueReader, ValueWriter};
58
59 pub(crate) fn test_value_reader_writer<
60 V: Eq + fmt::Debug,
61 TReader: ValueReader<Value = V>,
62 TWriter: ValueWriter<Value = V>,
63 >(
64 value_block: &[V],
65 ) {
66 let mut buffer = Vec::new();
67 {
68 let mut writer = TWriter::default();
69 for value in value_block {
70 writer.write(value);
71 }
72 writer.serialize_block(&mut buffer);
73 writer.clear();
74 }
75 let data_len = buffer.len();
76 buffer.extend_from_slice(&b"extradata"[..]);
77 let mut reader = TReader::default();
78 assert_eq!(reader.load(&buffer[..]).unwrap(), data_len);
79 for (i, val) in value_block.iter().enumerate() {
80 assert_eq!(reader.value(i), val);
81 }
82 }
83}