use anyhow::Result;
use std::fs::File;
use std::path::Path;
use crate::models::{FileKind, SanitizationPlan};
pub mod jpeg;
pub mod ooxml;
pub mod pdf;
pub mod png;
pub trait Sanitizer: Send + Sync {
fn kind(&self) -> FileKind;
fn plan(&self, input: &Path) -> Result<SanitizationPlan>;
fn sanitize(&self, input: &Path, output: &mut File) -> Result<SanitizationPlan>;
}
static PDF_SANITIZER: pdf::PdfSanitizer = pdf::PdfSanitizer;
static OOXML_SANITIZER: ooxml::OoXmlSanitizer = ooxml::OoXmlSanitizer;
static PNG_SANITIZER: png::PngSanitizer = png::PngSanitizer;
static JPEG_SANITIZER: jpeg::JpegSanitizer = jpeg::JpegSanitizer;
pub fn sanitizer_for(kind: FileKind) -> &'static dyn Sanitizer {
match kind {
FileKind::Pdf => &PDF_SANITIZER,
FileKind::OfficeOpenXml => &OOXML_SANITIZER,
FileKind::Png => &PNG_SANITIZER,
FileKind::Jpeg => &JPEG_SANITIZER,
}
}