katana_document_viewer/export_postprocess/
policy.rs1use 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}