redactrs

Crates.ioredactrs
lib.rsredactrs
version0.1.4
created_at2024-12-26 20:27:18.257829+00
updated_at2024-12-30 16:55:14.223302+00
descriptionWrapper to avoid accidentally leaking sensitive data during printing/logging
homepage
repositoryhttps://github.com/jeremyschiemann/redactrs.git
max_upload_size
id1495949
size20,704
Jeremy (jeremyschiemann)

documentation

https://docs.rs/redactrs

README

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}"#);
Commit count: 0

cargo fmt