Skip to main content

katana_document_viewer/export_postprocess/
policy.rs

1use super::{ExportPostprocessDiagnostic, ExportPostprocessMetrics};
2
3const MINIMUM_SIZE_REDUCTION_PERCENT_X100: i64 = 500;
4const MAXIMUM_POSTPROCESS_MILLIS: u128 = 30_000;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub struct ExportPostprocessPolicy {
8    pub minimum_size_reduction_percent_x100: i64,
9    pub maximum_postprocess_millis: u128,
10}
11
12impl ExportPostprocessPolicy {
13    pub fn v0_1_3() -> Self {
14        Self {
15            minimum_size_reduction_percent_x100: MINIMUM_SIZE_REDUCTION_PERCENT_X100,
16            maximum_postprocess_millis: MAXIMUM_POSTPROCESS_MILLIS,
17        }
18    }
19
20    pub(crate) fn diagnostics(
21        &self,
22        metrics: &ExportPostprocessMetrics,
23    ) -> Vec<ExportPostprocessDiagnostic> {
24        let mut diagnostics = Vec::new();
25        if metrics.size_reduction_percent_x100 < self.minimum_size_reduction_percent_x100 {
26            diagnostics.push(ExportPostprocessDiagnostic::new(
27                "postprocess-size-reduction-too-small",
28                "optimized PDF size reduction is below the v0.1.3 adoption threshold",
29            ));
30        }
31        if metrics.postprocess_millis > self.maximum_postprocess_millis {
32            diagnostics.push(ExportPostprocessDiagnostic::new(
33                "postprocess-too-slow",
34                "PDF postprocess time is above the v0.1.3 adoption threshold",
35            ));
36        }
37        diagnostics
38    }
39}