1use delivery_blob::compression::{ChunkedArchiveError, DataBuffer};
6use std::ops::Range;
7use storage_ptr_slice::MutPtrByteSlice;
8
9pub trait PageRequest: DataBuffer {
11 fn prepare(
18 &mut self,
19 read_range: Range<u64>,
20 read_alignment: usize,
21 ) -> Result<(), ChunkedArchiveError>;
22}
23
24pub struct NullPageRequest;
26
27impl DataBuffer for NullPageRequest {
28 fn range(&self) -> Range<u64> {
29 0..0
30 }
31
32 fn mut_ptr_slice(&mut self) -> MutPtrByteSlice<'_> {
33 MutPtrByteSlice::from(&mut [][..])
34 }
35
36 fn commit(&mut self, _size: usize) -> Result<(), ChunkedArchiveError> {
37 Ok(())
38 }
39}
40
41impl PageRequest for NullPageRequest {
42 fn prepare(
43 &mut self,
44 _read_range: Range<u64>,
45 _read_alignment: usize,
46 ) -> Result<(), ChunkedArchiveError> {
47 Ok(())
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn test_null_page_request() {
57 let mut req = NullPageRequest;
58 assert_eq!(req.range(), 0..0);
59 assert!(req.prepare(0..4096, 128 * 1024).is_ok());
60 assert_eq!(req.mut_ptr_slice().len(), 0);
61 assert!(req.commit(0).is_ok());
62 }
63}