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

expunge_derive

一个简单的crate,用于声明性地清除、红化和转换结构体字段

6个版本

0.3.4 2024年7月3日
0.3.3 2024年6月22日
0.3.1 2024年5月5日
0.2.0 2024年2月5日
0.1.0 2024年1月28日

#4 in #pii

Download history 2795/week @ 2024-04-17 3226/week @ 2024-04-24 3384/week @ 2024-05-01 4020/week @ 2024-05-08 5195/week @ 2024-05-15 6115/week @ 2024-05-22 5156/week @ 2024-05-29 4695/week @ 2024-06-05 4872/week @ 2024-06-12 4938/week @ 2024-06-19 4649/week @ 2024-06-26 5483/week @ 2024-07-03 4596/week @ 2024-07-10 5831/week @ 2024-07-17 8056/week @ 2024-07-24 6289/week @ 2024-07-31

25,904 每月下载量
用于 expunge

MIT 许可证

22KB
445

Expunge

一个用于清除/红化和转换敏感字段的crate。

操作示例

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,
)

贡献

  • 确保所有测试通过
    cargo test --all-features
    
  • 打开PR/问题报告

依赖

~0.2–0.8MB
~19K SLoC