use crate::audit::handlers::entry_audit_handler::EntryAuditHandler;
use crate::audit::report::ZipAuditReport;
use crate::audit::scan;
use std::fs::File;
use std::io::{Read, Seek};
use std::path::Path;
use zip::result::ZipResult;
pub fn zip_audit_file<P: AsRef<Path>>(archive: P) -> ZipResult<ZipAuditReport> {
let file = File::open(archive)?;
zip_audit(file)
}
pub fn zip_audit<R: Read + Seek>(reader: R) -> ZipResult<ZipAuditReport> {
scan::scan_zip(reader)
}
pub fn zip_audit_with_handlers<R: Read + Seek>(
reader: R,
handlers: Vec<Box<dyn EntryAuditHandler>>,
) -> ZipResult<ZipAuditReport> {
scan::scan_zip_with_handlers(reader, handlers)
}
#[cfg(feature = "audit-json")]
pub fn zip_audit_json<P: AsRef<Path>>(archive: P) -> ZipResult<serde_json::Value> {
let report = zip_audit_file(archive)?;
Ok(serde_json::to_value(&report).expect("serialization should not fail"))
}