vios_app 0.1.1

Small JSON vaults: Argon2id + AES-GCM, with optional AAD binding.
Documentation
use ignore::{WalkBuilder};
use ignore::gitignore::{Gitignore, GitignoreBuilder};
use std::path::PathBuf;

use crate::vaultgate::{GateConfig, GateHit};

pub fn scan_files(cfg: &GateConfig) -> Vec<GateHit> {
    let gi = build_matcher(cfg);
    let mut hits = Vec::new();

    for result in WalkBuilder::new(&cfg.root_dir)
        .standard_filters(false)
        .build()
    {
        match result {
            Ok(ent) => {
                let path = ent.path().to_path_buf();
                let rel = path.strip_prefix(&cfg.root_dir).unwrap_or(&path).to_path_buf();
                let is_dir = ent.file_type().map(|ft| ft.is_dir()).unwrap_or(false);
                let m = gi.matched_path_or_any_parents(&path, is_dir);
                let decision = if m.is_ignore() {
                    "IGNORE"
                } else {
                    "INCLUDE"
                };
                hits.push(GateHit::ok(rel, path, is_dir, decision, None));
            }
            Err(_) => continue,
        }
    }

    hits
}

fn build_matcher(cfg: &GateConfig) -> Gitignore {
    let mut builder = GitignoreBuilder::new(&cfg.root_dir);
    for pattern in &cfg.ignore_patterns {
        let _ = builder.add_line(None, pattern);
    }
    builder.build().unwrap_or_else(|_| Gitignore::empty())
}