zahirscan 0.3.4

Token-efficient content compression for AI analysis using probabilistic template mining
Documentation
use anyhow::Result;
use memmap2::Mmap;

use crate::config::RuntimeConfig;
use crate::parsers::{FileType, ParseResult};
use crate::results::MiningResult;

pub mod archive;
pub mod zip;

/// Dispatch by file type; fills `zip_metadata` or `archive_metadata` and returns templates.
///
/// # Errors
///
/// Propagates errors from [`zip::extract_zip_metadata`] or [`archive::extract_archive_metadata`], or their template helpers.
pub fn process(
    stats: &mut ParseResult,
    mmap: &Mmap,
    config: &RuntimeConfig,
) -> Result<MiningResult> {
    match stats.file_type {
        FileType::Zip => crate::process_with_metadata!(
            stats,
            mmap,
            config,
            zip_metadata,
            zip::extract_zip_metadata(mmap, stats, config),
            crate::results::ZipMetadata,
            FileType::Zip,
            zip::extract_zip_templates(mmap, stats, config)
        ),
        FileType::Archive => crate::process_with_metadata!(
            stats,
            mmap,
            config,
            archive_metadata,
            archive::extract_archive_metadata(mmap, stats, config),
            crate::results::ArchiveMetadata,
            FileType::Archive,
            archive::extract_archive_templates(mmap, stats, config)
        ),
        _ => unreachable!("container::process called with {:?}", stats.file_type),
    }
}