bento-kit 0.1.1

A bento box of common Rust utilities: id generation, timing, masking
Documentation
#![cfg(feature = "mask")]

use bento_kit::mask::{
    mask_bank_card, mask_email, mask_id_card, mask_name, mask_phone, mask_secret, mask_token,
};

#[test]
fn realistic_log_redaction_chain() {
    // Pretend we're scrubbing a customer record before logging it.
    let phone = "13812345678";
    let email = "alice@example.com";
    let id = "110101199001011234";
    let card = "6225881234567890";
    let token = "sk-1234567890abcdef";
    let name = "张三丰";
    let secret = "vault:AES256:abcXYZ";

    let scrubbed = format!(
        "name={} phone={} email={} id={} card={} token={} secret={}",
        mask_name(name),
        mask_phone(phone),
        mask_email(email),
        mask_id_card(id),
        mask_bank_card(card),
        mask_token(token),
        mask_secret(Some(secret), 3),
    );

    // Sanity-check none of the originals leak.
    for sensitive in [phone, email, id, card, token, secret] {
        assert!(
            !scrubbed.contains(sensitive),
            "sensitive value leaked in scrubbed output:\n  raw: {sensitive}\n  out: {scrubbed}"
        );
    }
}

#[test]
fn mask_secret_handles_none_and_empty_via_sentinel() {
    assert_eq!(mask_secret(None, 3), "<none>");
    assert_eq!(mask_secret(Some(""), 3), "<empty>");
}