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