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(®ion)?;
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}