vios_app 0.1.1

Small JSON vaults: Argon2id + AES-GCM, with optional AAD binding.
Documentation
use crate::vault::vault_crypto::write_vault_v2_file;
use crate::vault::vault_structs::{VaultMetadata, VaultPayload};

pub fn build_payload_from_text(text: &str, metadata_opt: Option<VaultMetadata>) -> VaultPayload {
    // Assuming you already had this logic elsewhere; keep existing behavior:
    // - fill metadata defaults
    // - mirror top-level creator_name for legacy compat
    let mut md = metadata_opt.unwrap_or_default();
    if md.creator_name.is_empty() {
        md.creator_name = whoami::realname();
    }
    let content = text.to_string();
    let mut payload = VaultPayload {
        metadata: md.clone(),
        content,
        creator_name: String::new(),
    };
    payload.creator_name = payload.metadata.creator_name.clone();
    payload
}

pub fn write_vault_file(
    path: &std::path::Path,
    password: &str,
    text: &str,
    metadata_opt: Option<VaultMetadata>,
) -> Result<(), String> {
    let payload = build_payload_from_text(text, metadata_opt);
    let serialized = serde_json::to_vec(&payload).map_err(|e| e.to_string())?;
    write_vault_v2_file(path, password, &serialized).map_err(|e| e.to_string())
}