#struct-fields #zeroize #sensitive #redact #secret #pii

expunge

A simple crate to expunge, redact and transform struct fields declaratively

6 releases

0.3.4 Jul 3, 2024
0.3.3 Jun 22, 2024
0.3.1 May 5, 2024
0.2.0 Feb 5, 2024
0.1.1 Jan 31, 2024

#370 in Encoding

Download history 6833/week @ 2024-10-30 6215/week @ 2024-11-06 7526/week @ 2024-11-13 10501/week @ 2024-11-20 11295/week @ 2024-11-27 11125/week @ 2024-12-04 9745/week @ 2024-12-11 7338/week @ 2024-12-18 1882/week @ 2024-12-25 6375/week @ 2025-01-01 8681/week @ 2025-01-08 9652/week @ 2025-01-15 10184/week @ 2025-01-22 10393/week @ 2025-01-29 7874/week @ 2025-02-05 7056/week @ 2025-02-12

36,864 downloads per month

MIT license

12KB
238 lines

Expunge

A crate for expunging/redacting and transforming sensitive fields.

In action

use expunge::Expunge;
use serde::{Serialize, Deserialize};

#[derive(Clone, Serialize, Deserialize, Expunge)]
struct User {
  #[expunge(skip)] // skipped fields are not transformed
  id: i64,
  #[expunge(as = "Randy".to_string())]
  first_name: String,
  #[expunge(as = "Lahey".to_string())]
  last_name: String,
  #[expunge(with = sha256::digest)]
  date_of_birth: String,
  latitude: f64,
  longitude: f64,
  #[expunge(as = "<expunged>".to_string(), zeroize)]
  password_hash: String,
}

let user = User{
  id: 101,
  first_name: "Ricky".to_string(),
  last_name: "LaFleur".to_string(),
  date_of_birth: "02/02/1960".to_string(),
  latitude: 45.0778,
  longitude: 63.546,
  password_hash: "2f089e52def4cec8b911883fecdd6d8febe9c9f362d15e3e33feb2c12f07ccc1".to_string(),
};

let expunged_user = user.expunge();

let output = serde_json::to_string_pretty(&expunged_user).expect("should serialize");

assert_eq!(r#"{
  "id": 101,
  "first_name": "Randy",
  "last_name": "Lahey",
  "date_of_birth": "eeb98c815ae11240b563892c52c8735472bb8259e9a6477e179a9ea26e7a695a",
  "latitude": 0.0,
  "longitude": 0.0,
  "password_hash": "<expunged>"
}"#,
  output,
)

Contributing

  • Ensure that all tests are passing
    cargo test --all-features
    
  • Open a PR/issue

Dependencies

~205–780KB
~18K SLoC