Skip to main content

RangeReader

Trait RangeReader 

Source
pub trait RangeReader {
    // Required methods
    fn len(&self) -> u64;
    fn read_at(&self, offset: u64, len: u64) -> Result<Vec<u8>>;

    // Provided methods
    fn is_empty(&self) -> bool { ... }
    fn read_many(&self, ranges: &[(u64, u64)]) -> Result<Vec<Vec<u8>>> { ... }
    fn concurrency(&self) -> usize { ... }
}
Expand description

Something that can serve arbitrary byte ranges of a .rete resource.

Required Methods§

Source

fn len(&self) -> u64

Total resource length in bytes.

Source

fn read_at(&self, offset: u64, len: u64) -> Result<Vec<u8>>

Read len bytes starting at offset. Implementations should error on an out-of-bounds range rather than truncating.

Provided Methods§

Source

fn is_empty(&self) -> bool

True when the resource is empty.

Source

fn read_many(&self, ranges: &[(u64, u64)]) -> Result<Vec<Vec<u8>>>

Read several (offset, len) ranges, returning each range’s bytes in request order. These ranges are independent, so a reader whose backing store is high-latency but parallelizable (an HTTP client) overrides this to issue the reads concurrently — turning N round trips into ~N/P. The default fetches them sequentially. Any range failing fails the batch.

Source

fn concurrency(&self) -> usize

How many ranges this reader can usefully have in flight at once — the planner’s hint for probe-vs-scan and batch-size decisions (a phone’s serial sync-XHR reader reports 1; the CLI’s threaded HTTP client and the browser’s concurrent-fetch variants report their fan-out). Purely advisory: correctness never depends on it. Defaults to 1 (sequential).

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<R: RangeReader + ?Sized> RangeReader for Arc<R>

Sharing a reader (e.g. keeping a counting handle while a lazily-faulting Rete owns another) just delegates.

Source§

fn len(&self) -> u64

Source§

fn read_at(&self, offset: u64, len: u64) -> Result<Vec<u8>>

Source§

fn read_many(&self, ranges: &[(u64, u64)]) -> Result<Vec<Vec<u8>>>

Source§

fn concurrency(&self) -> usize

Implementors§