Skip to main content

wsi_rs/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2
3//! # wsi-rs
4//!
5//! `wsi-rs` is a whole-slide image reader focused on deterministic public
6//! APIs for TIFF-family WSI, DICOM VL WSI, selected vendor containers, and
7//! explicit failure behavior for unsupported inputs.
8//!
9//! ## Quick Start
10//!
11//! Read a region in level coordinates as an `image::RgbaImage`:
12//!
13//! ```rust,no_run
14//! use wsi_rs::{LevelIdx, RegionRequest, SceneId, SeriesId, Slide};
15//!
16//! fn main() -> Result<(), Box<dyn std::error::Error>> {
17//!     let slide = Slide::open("sample.svs")?;
18//!     let region = RegionRequest::builder(SceneId::new(0), SeriesId::new(0), LevelIdx::new(0))
19//!         .origin_px((0, 0))
20//!         .size_px((1024, 1024))
21//!         .build()?;
22//!
23//!     let image = slide.read_region_rgba(&region)?;
24//!     image.save("region.png")?;
25//!     Ok(())
26//! }
27//! ```
28//!
29//! ## Tile Reads
30//!
31//! Use tile-level APIs for viewers, caches, benchmarks, and workflows that need
32//! exact tile coordinates:
33//!
34//! ```rust,no_run
35//! use wsi_rs::{LevelIdx, SceneId, SeriesId, Slide, TileOutputPreference, TilePixels, TileRequest};
36//!
37//! fn main() -> Result<(), Box<dyn std::error::Error>> {
38//!     let slide = Slide::open("sample.svs")?;
39//!     let request = TileRequest::builder(SceneId::new(0), SeriesId::new(0), LevelIdx::new(0))
40//!         .tile(0, 0)
41//!         .build()?;
42//!
43//!     match slide.read_tile(&request, TileOutputPreference::cpu())? {
44//!         TilePixels::Cpu(tile) => {
45//!             println!("{}x{} tile", tile.width(), tile.height());
46//!         }
47//!         TilePixels::Device(_) => unreachable!("CPU output was requested"),
48//!         _ => unreachable!("CPU output was requested"),
49//!     }
50//!     Ok(())
51//! }
52//! ```
53//!
54#![forbid(unsafe_code)]
55
56pub(crate) mod core;
57pub(crate) mod decode;
58pub mod error;
59pub(crate) mod formats;
60pub mod output;
61pub mod properties;
62
63pub use core::cache::CacheConfig;
64pub use core::decode_runtime::{DecodeExecutionOptions, DecodeRoute, DecodeRouteDecision};
65pub use error::WsiError;
66pub use formats::svcache::{
67    build_svcache, build_svcache_tile_payloads_merge, build_svcache_tile_payloads_replace,
68    build_svcache_tiles, build_svcache_tiles_replace, cache_dir_svcache_path, default_svcache_path,
69    svcache_candidate_paths, svcache_matches_source, SvcachePolicy, SvcacheTileSelection,
70};
71#[cfg(feature = "cuda")]
72pub use output::cuda::CudaDeviceTile;
73pub use properties::Properties;
74
75// Multi-dimensional API
76pub use core::registry::{
77    DatasetReader, FormatProbe, FormatRegistry, ProbeConfidence, ProbeResult, Slide,
78    SlideOpenOptions, SlideReadContext, SlideReader,
79};
80pub use core::types::{
81    AssociatedImage, AxesShape, ChannelInfo, ColorSpace, Compression, CpuTile, CpuTileData,
82    CpuTileLayout, Dataset, DatasetId, DeviceOutputContext, DeviceTile, DisplayWindow,
83    EncodedTilePhotometricInterpretation, IccProfileKey, IccProfileProvenance, Level, LevelIdx,
84    LevelSourceKind, OutputBackendRequest, PixelFormat, PlaneIdx, PlaneSelection,
85    RawCompressedTile, RawCompressedTileBuildError, RawCompressedTileBuilder, RegionRequest,
86    RegionRequestBuilder, RequestBuildError, SampleType, Scene, SceneId, Series, SeriesId,
87    SourceIccProfile, SourceIccProfileConflict, SourceIccProfileKey, TileCodecKind, TileEntry,
88    TileHit, TileLayout, TileOutputPreference, TilePixels, TileRequest, TileRequestBuilder,
89    TileViewRequest, TileViewRequestBuilder,
90};
91
92pub mod prelude {
93    //! Common imports for applications using `wsi-rs`.
94
95    pub use crate::{
96        AssociatedImage, CacheConfig, ColorSpace, CpuTile, Dataset, IccProfileKey, Level, LevelIdx,
97        PixelFormat, PlaneIdx, PlaneSelection, RegionRequest, RequestBuildError, Scene, SceneId,
98        Series, SeriesId, Slide, SlideOpenOptions, TileOutputPreference, TilePixels, TileRequest,
99        WsiError,
100    };
101}