Skip to main content

wsi_dicom/
request.rs

1//! Request types accepted by the public export, profile, coverage, and encode APIs.
2
3use std::path::PathBuf;
4use std::time::Duration;
5
6use signinum_j2k::J2kLosslessSamples;
7
8use crate::{
9    CodecValidation, DicomExportOptions, EncodeBackendPreference, MetadataSource, TransferSyntax,
10    WsiDicomError,
11};
12
13/// A validated request to export one vendor WSI into one DICOM output directory.
14#[derive(Debug, Clone, PartialEq)]
15pub struct DicomExportRequest {
16    pub source_path: PathBuf,
17    pub output_dir: PathBuf,
18    pub options: DicomExportOptions,
19    pub metadata: MetadataSource,
20    pub level_filter: Option<u32>,
21}
22
23impl DicomExportRequest {
24    pub fn new(
25        source_path: PathBuf,
26        output_dir: PathBuf,
27        options: DicomExportOptions,
28    ) -> Result<Self, WsiDicomError> {
29        options.validate()?;
30        Ok(Self {
31            source_path,
32            output_dir,
33            options,
34            metadata: MetadataSource::ResearchPlaceholder,
35            level_filter: None,
36        })
37    }
38
39    pub fn validate(&self) -> Result<(), WsiDicomError> {
40        self.options.validate()
41    }
42}
43
44/// Request to encode one already-composed tile into DICOM-ready J2K/HTJ2K frame bytes.
45#[derive(Debug, Clone, Copy)]
46pub struct DicomJ2kFrameEncodeRequest<'a> {
47    pub samples: J2kLosslessSamples<'a>,
48    pub transfer_syntax: TransferSyntax,
49    pub encode_backend: EncodeBackendPreference,
50    pub codec_validation: CodecValidation,
51}
52
53#[derive(Debug, Clone, PartialEq)]
54pub struct DicomRouteProfileRequest {
55    pub source_path: PathBuf,
56    pub options: DicomExportOptions,
57    pub level: u32,
58    pub max_frames: u64,
59}
60
61/// Request for source-aware default transfer syntax selection.
62#[derive(Debug, Clone, PartialEq, Eq)]
63pub struct DefaultTransferSyntaxRequest {
64    pub source_path: PathBuf,
65    pub tile_size: u32,
66    pub level_filter: Option<u32>,
67    pub max_levels: Option<u32>,
68}
69
70#[derive(Debug, Clone, PartialEq)]
71pub struct DicomRouteCoverageRequest {
72    pub source_path: PathBuf,
73    pub options: DicomExportOptions,
74    pub max_frames_per_level: u64,
75    pub max_levels: Option<u32>,
76    pub max_level_elapsed: Option<Duration>,
77    pub progress: Option<DicomRouteCoverageProgress>,
78}
79
80#[derive(Debug, Clone, Copy, PartialEq, Eq)]
81pub enum DicomRouteCoverageProgress {
82    Stderr,
83}
84
85#[derive(Debug, Clone, PartialEq)]
86pub struct DicomRouteCorpusCoverageRequest {
87    pub source_root: PathBuf,
88    pub options: DicomExportOptions,
89    pub max_frames_per_level: u64,
90    pub max_levels: Option<u32>,
91    pub max_level_elapsed: Option<Duration>,
92    pub progress: Option<DicomRouteCorpusCoverageProgress>,
93}
94
95#[derive(Debug, Clone, Copy, PartialEq, Eq)]
96pub enum DicomRouteCorpusCoverageProgress {
97    Stderr,
98}