Skip to content

Commit bab30cf

Browse files
committed
added specific functions to AsyncFileReader trait so we know where we are wrt. caching
1 parent 2cd95c9 commit bab30cf

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/ifd.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ impl ImageFileDirectory {
779779
let range = self
780780
.get_tile_byte_range(x, y)
781781
.ok_or(AsyncTiffError::General("Not a tiled TIFF".to_string()))?;
782-
let compressed_bytes = reader.get_bytes(range).await?;
782+
let compressed_bytes = reader.get_tile_bytes(range).await?;
783783
Ok(Tile {
784784
x,
785785
y,
@@ -810,7 +810,7 @@ impl ImageFileDirectory {
810810
.collect::<AsyncTiffResult<Vec<_>>>()?;
811811

812812
// 2: Fetch using `get_ranges
813-
let buffers = reader.get_byte_ranges(byte_ranges).await?;
813+
let buffers = reader.get_tile_byte_ranges(byte_ranges).await?;
814814

815815
// 3: Create tile objects
816816
let mut tiles = vec![];

src/reader.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ use crate::error::{AsyncTiffError, AsyncTiffResult};
3535
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
3636
pub trait AsyncFileReader: Debug + Send + Sync {
3737
/// Retrieve the bytes in `range`
38+
/// This function is called when reading in IFDs
3839
async fn get_bytes(&self, range: Range<u64>) -> AsyncTiffResult<Bytes>;
3940

4041
/// Retrieve multiple byte ranges. The default implementation will call `get_bytes`
4142
/// sequentially
43+
/// This function is called when reading in IFDs
4244
async fn get_byte_ranges(&self, ranges: Vec<Range<u64>>) -> AsyncTiffResult<Vec<Bytes>> {
4345
let mut result = Vec::with_capacity(ranges.len());
4446

@@ -49,6 +51,18 @@ pub trait AsyncFileReader: Debug + Send + Sync {
4951

5052
Ok(result)
5153
}
54+
55+
/// Same as [`get_bytes`], but this function is called when retrieving
56+
/// compressed tile data
57+
async fn get_tile_bytes(&self, range: Range<u64>) -> AsyncTiffResult<Bytes> {
58+
self.get_bytes(range).await
59+
}
60+
61+
/// Same as [`get_byte_ranges`], but this function is only called when retrieving
62+
/// compressed tile data
63+
async fn get_tile_byte_ranges(&self, ranges: Vec<Range<u64>>) -> AsyncTiffResult<Vec<Bytes>> {
64+
self.get_byte_ranges(ranges).await
65+
}
5266
}
5367

5468
/// This allows Box<dyn AsyncFileReader + '_> to be used as an AsyncFileReader,

0 commit comments

Comments
 (0)