#hide #redacted #logging #sensitive-data #mute

redactrs

Wrapper to avoid accidentally leaking sensitive data during printing/logging

4 releases

0.1.4 Dec 30, 2024
0.1.3 Dec 27, 2024
0.1.2 Dec 27, 2024
0.1.1 Dec 27, 2024
0.1.0 Dec 26, 2024

#360 in Value formatting

Download history 268/week @ 2024-12-23 119/week @ 2024-12-30 7/week @ 2025-01-06

394 downloads per month

MIT license

16KB
226 lines

Redactrs   Latest Version Total Downloads MSRV License Build Status Documentation

What is it?

Redactrs is a wrapper for sensitive data that you want to avoid being leaked by accidentally printing/logging/etc. them.

How the data is redacted is defined by the Redactor. A Redactor is a struct that implements the Redactor-trait.

Usage

First add this crate to your project:

cargo add redactrs

In its most basic form, Redacted is used like this:

use redact::Redacted;

let x: Redacted<&str> = "sensitive".into();

assert_eq!(x.to_string(), "<redacted>");

This will by default use the Simple-Redactor. If desired, it can be swapped with the Custom-Redactor.

use redact::Redacted;
use redact::redactors::Custom;

let x: Redacted<&str, Custom<'X', 5>> = "sensitive".into();

assert_eq!(x.to_string(), "XXXXX");

To get back the wrapped type, you can either use .into_inner() which consumes the Redacted and returns the wrapped type or use .inner()/.inner_mut() for a (mutable) reference of the wrapped type.

Serde support

Serde support can be activated by activating the serde feature!

cargo add redactrs -F serde

By default, Redacted types will serialize into their redacted representation. If you don’t want this, and rather serialize normally you can annotate the redacted field with this attribute: #[serde(serialize_with = "no_redact")]

use redactrs::Redacted;
use serde::Serialize;
use redactrs::serde::no_redact;

#[derive(Serialize)]
struct MyData {
    #[serde(serialize_with = "no_redact" )]
    a: Redacted<i32>,
}

let data = MyData {
    a: 42.into(),
};

let json = serde_json::to_string(&data).expect("Test case");
assert_eq!(json, r#"{"a":42}"#);

Dependencies

~170KB