vios_app 0.1.1

Small JSON vaults: Argon2id + AES-GCM, with optional AAD binding.
Documentation
// 📜 vaultrules.rs — Organizational Rule Enforcement for Vaults
use std::path::Path;

/// Organizational enforcement rules
pub struct VaultRules {
    pub require_metadata: bool,
    pub require_cia_signature: bool,
    pub max_file_size_bytes: Option<u64>,
}

impl VaultRules {
    /// Load default rule profile
    pub fn default() -> Self {
        VaultRules {
            require_metadata: true,
            require_cia_signature: true,
            max_file_size_bytes: Some(50 * 1024 * 1024), // 50MB limit
        }
    }

    /// Enforce file-specific rules
    pub fn validate_file(&self, path: &Path) -> Result<(), String> {
        let metadata = std::fs::metadata(path)
            .map_err(|_| format!("Could not read file metadata: {:?}", path))?;

        if let Some(limit) = self.max_file_size_bytes {
            if metadata.len() > limit {
                return Err(format!(
                    "File {:?} exceeds max size of {} bytes",
                    path,
                    limit
                ));
            }
        }

        Ok(())
    }

    /// Enforce Vault-wide rules (placeholder for future logic)
    pub fn validate_vault_compliance(&self, has_meta: bool, has_cia: bool) -> Result<(), String> {
        if self.require_metadata && !has_meta {
            return Err("Vault is missing required metadata.".to_string());
        }

        if self.require_cia_signature && !has_cia {
            return Err("Vault is missing required CIA signature.".to_string());
        }

        Ok(())
    }
}