yara-x 1.19.0

A pure Rust implementation of YARA.
Documentation
use std::ops::Deref;

use crate::mods::prelude::*;
use crate::modules::ModuleError;
use crate::modules::protos::zip::Zip;
use crate::modules::utils::zip::ZipCache;
use crate::register_module;

pub fn main<'a>(
    ctx: &mut ModuleContext<'a>,
    data: &'a [u8],
) -> Result<Zip, ModuleError> {
    match ctx.zip_cache.get_or_insert_with(|| ZipCache::new(data)) {
        ZipCache::Cached(zip) => Ok(zip.deref().into()),
        ZipCache::NotZip => {
            let mut zip = Zip::new();
            zip.set_is_zip(false);
            Ok(zip)
        }
    }
}

register_module!("zip", Zip, main);