vortex_io/file/read/
source.rs1use std::sync::Arc;
5
6use futures::FutureExt;
7use futures::future::BoxFuture;
8use futures::future::LocalBoxFuture;
9use futures::stream::BoxStream;
10use vortex_error::VortexResult;
11
12use crate::file::IoRequest;
13use crate::runtime::Handle;
14
15pub trait IntoReadSource {
17 fn into_read_source(self, handle: Handle) -> VortexResult<ReadSourceRef>;
18}
19
20pub type ReadSourceRef = Arc<dyn ReadSource>;
21
22pub trait ReadSource: Send + Sync {
24 fn uri(&self) -> &Arc<str>;
26
27 fn coalesce_window(&self) -> Option<CoalesceWindow>;
29
30 fn size(&self) -> BoxFuture<'static, VortexResult<u64>>;
32
33 fn drive_send(
35 self: Arc<Self>,
36 requests: BoxStream<'static, IoRequest>,
37 ) -> BoxFuture<'static, ()>;
38
39 fn drive_local(
41 self: Arc<Self>,
42 requests: BoxStream<'static, IoRequest>,
43 ) -> LocalBoxFuture<'static, ()> {
44 self.drive_send(requests).boxed_local()
45 }
46}
47
48#[derive(Clone, Copy, Debug)]
49pub struct CoalesceWindow {
50 pub distance: u64,
52 pub max_size: u64,
54}