Skip to main content

vortex_io/compat/
read_at.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::sync::Arc;
5
6use futures::FutureExt;
7use futures::StreamExt;
8use futures::future::BoxFuture;
9use vortex_array::buffer::BufferHandle;
10use vortex_buffer::Alignment;
11use vortex_error::VortexResult;
12
13use crate::CoalesceConfig;
14use crate::ReadAtRequest;
15use crate::ReadAtStream;
16use crate::VortexReadAt;
17use crate::compat::Compat;
18
19/// Compatibility adapter for `VortexReadAt` implementations that are based on Tokio.
20#[deny(clippy::missing_trait_methods)]
21impl<R: VortexReadAt> VortexReadAt for Compat<R> {
22    fn uri(&self) -> Option<&Arc<str>> {
23        self.inner().uri()
24    }
25
26    fn coalesce_config(&self) -> Option<CoalesceConfig> {
27        self.inner().coalesce_config()
28    }
29
30    fn concurrency(&self) -> usize {
31        self.inner().concurrency()
32    }
33
34    fn size(&self) -> BoxFuture<'static, VortexResult<u64>> {
35        Compat::new(self.inner().size()).boxed()
36    }
37
38    fn read_at(
39        &self,
40        offset: u64,
41        length: usize,
42        alignment: Alignment,
43    ) -> BoxFuture<'static, VortexResult<BufferHandle>> {
44        Compat::new(self.inner().read_at(offset, length, alignment)).boxed()
45    }
46
47    fn read_ranges(&self, requests: Arc<[ReadAtRequest]>) -> ReadAtStream {
48        Compat::new(self.inner().read_ranges(requests)).boxed()
49    }
50}