pub trait SlideReader: Send + Sync {
Show 15 methods
// Required methods
fn dataset(&self) -> &Dataset;
fn read_tile_cpu(&self, req: &TileRequest) -> Result<CpuTile, WsiError>;
fn read_associated(&self, name: &str) -> Result<CpuTile, WsiError>;
// Provided methods
fn tile_codec_kind(&self, _req: &TileRequest) -> TileCodecKind { ... }
fn level_source_kind(
&self,
scene: usize,
series: usize,
level: u32,
) -> Result<LevelSourceKind, WsiError> { ... }
fn read_tiles(
&self,
reqs: &[TileRequest],
output: TileOutputPreference,
) -> Result<Vec<TilePixels>, WsiError> { ... }
fn read_tile(
&self,
req: &TileRequest,
output: TileOutputPreference,
) -> Result<TilePixels, WsiError> { ... }
fn read_raw_compressed_tile(
&self,
req: &TileRequest,
) -> Result<RawCompressedTile, WsiError> { ... }
fn read_tiles_cpu(
&self,
reqs: &[TileRequest],
) -> Result<Vec<CpuTile>, WsiError> { ... }
fn use_display_tile_cache(&self, _req: &TileViewRequest) -> bool { ... }
fn read_region_fastpath(
&self,
_ctx: &mut SlideReadContext<'_>,
_req: &RegionRequest,
) -> Option<Result<CpuTile, WsiError>> { ... }
fn read_region(
&self,
req: &RegionRequest,
output: TileOutputPreference,
) -> Result<TilePixels, WsiError> { ... }
fn read_display_tile(
&self,
req: &TileViewRequest,
) -> Result<CpuTile, WsiError> { ... }
fn associated_image(&self, name: &str) -> Result<Option<CpuTile>, WsiError> { ... }
fn recommended_shared_cache_bytes(&self) -> Option<u64> { ... }
}Expand description
Phase-2 read interface.
read_tile is a default impl over a 1-element slice into read_tiles. A
backend that overrides read_tiles automatically gets the right
read_tile for free:
use statumen::{
ColorSpace, CpuTile, Dataset, SlideReader, TileOutputPreference, TilePixels, TileRequest,
WsiError,
};
struct Mock;
impl SlideReader for Mock {
fn dataset(&self) -> &Dataset { unimplemented!() }
fn read_tiles(
&self,
reqs: &[TileRequest],
_: TileOutputPreference,
) -> Result<Vec<TilePixels>, WsiError> {
Ok(reqs
.iter()
.map(|_| {
TilePixels::Cpu(
CpuTile::from_u8_interleaved(1, 1, 3, ColorSpace::Rgb, vec![255, 0, 0])
.unwrap(),
)
})
.collect())
}
fn read_tile_cpu(&self, _: &TileRequest) -> Result<CpuTile, WsiError> {
Ok(CpuTile::from_u8_interleaved(1, 1, 3, ColorSpace::Rgb, vec![255, 0, 0]).unwrap())
}
fn read_associated(&self, name: &str) -> Result<CpuTile, WsiError> {
Err(WsiError::AssociatedImageNotFound(name.into()))
}
}
let m = Mock;
let _ = m.read_tile(
&TileRequest {
scene: 0,
series: 0,
level: 0,
plane: Default::default(),
col: 0,
row: 0,
},
TileOutputPreference::cpu(),
);