use serde::{de::DeserializeOwned, Serialize};
use crate::analytics::font::FontStats;
use crate::analytics::geometry::GeometryStats;
use crate::analytics::region::RegionStats;
use crate::types::PdfTextElement;
pub trait Statistic {
type Output: Serialize + DeserializeOwned + Clone + Default + std::fmt::Debug;
const NAME: &'static str;
fn observe(&mut self, element: &PdfTextElement);
fn finalize(self, ctx: &FinalizationContext<'_>) -> Self::Output;
}
#[derive(Debug, Default)]
pub struct FinalizationContext<'a> {
pub font: Option<&'a FontStats>,
pub geometry: Option<&'a GeometryStats>,
pub region: Option<&'a RegionStats>,
}