katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use super::{ExportPostprocessDiagnostic, ExportPostprocessMetrics};

const MINIMUM_SIZE_REDUCTION_PERCENT_X100: i64 = 500;
const MAXIMUM_POSTPROCESS_MILLIS: u128 = 30_000;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ExportPostprocessPolicy {
    pub minimum_size_reduction_percent_x100: i64,
    pub maximum_postprocess_millis: u128,
}

impl ExportPostprocessPolicy {
    pub fn v0_1_3() -> Self {
        Self {
            minimum_size_reduction_percent_x100: MINIMUM_SIZE_REDUCTION_PERCENT_X100,
            maximum_postprocess_millis: MAXIMUM_POSTPROCESS_MILLIS,
        }
    }

    pub(crate) fn diagnostics(
        &self,
        metrics: &ExportPostprocessMetrics,
    ) -> Vec<ExportPostprocessDiagnostic> {
        let mut diagnostics = Vec::new();
        if metrics.size_reduction_percent_x100 < self.minimum_size_reduction_percent_x100 {
            diagnostics.push(ExportPostprocessDiagnostic::new(
                "postprocess-size-reduction-too-small",
                "optimized PDF size reduction is below the v0.1.3 adoption threshold",
            ));
        }
        if metrics.postprocess_millis > self.maximum_postprocess_millis {
            diagnostics.push(ExportPostprocessDiagnostic::new(
                "postprocess-too-slow",
                "PDF postprocess time is above the v0.1.3 adoption threshold",
            ));
        }
        diagnostics
    }
}