openslide_rs/
lib.rs

1#[macro_use]
2extern crate lazy_static;
3
4use crate::properties::Properties;
5
6#[cfg(feature = "deepzoom")]
7use {
8    crate::traits::Slide,
9    std::{borrow::Borrow, marker::PhantomData},
10};
11
12mod bindings;
13#[cfg(feature = "openslide4")]
14mod cache;
15#[cfg(feature = "deepzoom")]
16pub mod deepzoom;
17pub mod errors;
18pub mod properties;
19#[cfg(feature = "deepzoom")]
20pub mod traits;
21mod utils;
22mod wrapper;
23
24/// The corresponding result type used by the crate.
25pub type Result<T, E = errors::OpenSlideError> = std::result::Result<T, E>;
26
27/// Openslide object is a simple wrapper around `openslide_t` "C" type.
28/// Implementation provides all functions available in the "C" API
29/// It contains also openslide and vendor specific properties found in WSI.
30///
31/// Note : As stated by the `OpenSlide` documentation, all function are thread-safe except close()
32/// For this reason `OpenSlide` implement the Drop trait which call close() automatically
33#[derive(Debug)]
34pub struct OpenSlide {
35    osr: bindings::OpenSlideWrapper,
36    pub properties: Properties,
37}
38
39/// Generates Deep Zoom tiles and metadata.
40#[cfg(feature = "deepzoom")]
41#[derive(Debug)]
42pub struct DeepZoomGenerator<S: Slide, B: Borrow<S>> {
43    slide: B,
44    _phantom: PhantomData<S>,
45
46    level_count: usize,
47    level_tiles: Vec<Size>,
48    level_dimensions: Vec<Size>,
49
50    tile_size: u32,
51    overlap: u32,
52
53    l0_offset: Address,
54    slide_level_dimensions: Vec<Size>,
55    slide_from_dz_level: Vec<u32>,
56    l0_l_downsamples: Vec<f64>,
57    l_z_downsamples: Vec<f64>,
58}
59
60/// Region struct
61/// Used to retrieve a tile in a WSI
62#[derive(Debug, Clone, Copy, PartialEq, Eq)]
63pub struct Region {
64    pub size: Size,
65    pub level: u32,
66    pub address: Address,
67}
68
69/// Simple Size struct
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
71pub struct Size {
72    pub w: u32,
73    pub h: u32,
74}
75
76/// Simple Address struct
77#[derive(Debug, Clone, Copy, PartialEq, Eq)]
78pub struct Address {
79    pub x: u32,
80    pub y: u32,
81}