rullst-orm 6.1.1

Fast, un-opinionated, database-agnostic ORM for Rust
Documentation
use rullst_orm::{PersonalData, privacy::ComplianceModel};

#[derive(PersonalData, Default)]
pub struct UserData {
    pub id: i32,
    #[privacy]
    pub ssn: String,
    pub name: String,
}

#[derive(PersonalData, Default)]
pub struct PublicData {
    pub id: i32,
    pub name: String,
}

#[test]
fn test_personal_data_compliance_schema() {
    let report = UserData::compliance_schema();
    assert_eq!(report.table_name, "userdata");
    assert!(report.has_encrypted_data);
    assert_eq!(report.encrypted_fields.len(), 1);
    assert_eq!(report.encrypted_fields[0], "ssn");

    let report2 = PublicData::compliance_schema();
    assert_eq!(report2.table_name, "publicdata");
    assert!(!report2.has_encrypted_data);
    assert!(report2.encrypted_fields.is_empty());
}

#[test]
fn test_personal_data_debug() {
    let user = UserData {
        id: 1,
        ssn: "123-45-678".to_string(),
        name: "Alice".to_string(),
    };

    let debug_str = format!("{:?}", user);
    assert!(debug_str.contains("id: 1"));
    assert!(debug_str.contains("name: \"Alice\""));
    assert!(debug_str.contains("ssn: \"[REDACTED_BY_RULLST_SHIELD]\""));
    assert!(!debug_str.contains("123-45-678"));

    let pub_data = PublicData {
        id: 2,
        name: "Bob".to_string(),
    };

    let debug_str_pub = format!("{:?}", pub_data);
    assert!(debug_str_pub.contains("id: 2"));
    assert!(debug_str_pub.contains("name: \"Bob\""));
}