Skip to main content

Crate cqrs_es_crypto_derive

Crate cqrs_es_crypto_derive 

Source
Expand description

Proc-macro crate for #[derive(PiiCodec)].

Generates a {Name}PiiCodec struct and a [PiiEventCodec] implementation from an annotated event enum.

§Usage

use cqrs_es_crypto::PiiCodec;

#[derive(PiiCodec)]
enum MyEvent {
    #[pii(event_type = "SensitiveEvent")]
    SensitiveEvent {
        #[pii(subject)]   subject_id: uuid::Uuid,
        #[pii(plaintext)] tag: String,
        #[pii(secret)]    secret: String,
    },
    PlainEvent { data: String },
}
// Generates: pub struct MyEventPiiCodec;
// + impl PiiEventCodec for MyEventPiiCodec { ... }

§Field types and redaction

#[pii(secret)] fields are redacted to a per-type default when the subject’s DEK has been deleted. The defaults are:

Field typeRedaction valueNotes
String"[redacted]"fixed; not user-overridable
Option<_>nullfixed; not user-overridable
serde_json::Value{}fixed; not user-overridable
Vec<_>[]fixed; not user-overridable
chrono::NaiveDate"0000-01-01"requires the chrono feature; overridable

For types that don’t have an inferred default (or to override one that does support overrides) supply an explicit redaction value:

#[derive(PiiCodec)]
enum MyEvent {
    #[pii(event_type = "PersonCaptured")]
    PersonCaptured {
        #[pii(subject)]                       subject_id: uuid::Uuid,
        #[pii(secret)]                        name: String,
        // Default `"0000-01-01"` (requires the `chrono` feature):
        #[pii(secret)]                        dob: chrono::NaiveDate,
        // Custom override:
        #[pii(secret, redact = "1900-01-01")] dod: chrono::NaiveDate,
    },
}

Derive Macros§

PiiCodec
Derives a PiiEventCodec implementation from an annotated event enum.