vortex_serde/io/
offset.rs

1use std::future::Future;
2
3use bytes::BytesMut;
4
5use crate::io::VortexReadAt;
6
7/// An adapter that offsets all reads by a fixed amount.
8pub struct OffsetReadAt<R> {
9    read: R,
10    offset: u64,
11}
12
13impl<R: VortexReadAt> OffsetReadAt<R> {
14    pub fn new(read: R, offset: u64) -> Self {
15        Self { read, offset }
16    }
17}
18
19impl<R: VortexReadAt> VortexReadAt for OffsetReadAt<R> {
20    fn read_at_into(
21        &self,
22        pos: u64,
23        buffer: BytesMut,
24    ) -> impl Future<Output = std::io::Result<BytesMut>> {
25        self.read.read_at_into(pos + self.offset, buffer)
26    }
27
28    fn performance_hint(&self) -> usize {
29        self.read.performance_hint()
30    }
31
32    async fn size(&self) -> u64 {
33        self.read.size().await - self.offset
34    }
35}