use core::fmt::Write;
use rapidhash::v3::{RapidSecrets, rapidhash_v3_seeded};
use crate::{DataClass, Redactor};
pub const REDACTED_LEN: usize = 16;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct RapidHashRedactor {
secrets: RapidSecrets,
}
impl RapidHashRedactor {
#[must_use]
pub fn with_secrets(secrets: RapidSecrets) -> Self {
Self { secrets }
}
}
impl Redactor for RapidHashRedactor {
fn redact(&self, _: &DataClass, value: &str, output: &mut dyn Write) -> core::fmt::Result {
let hash = rapidhash_v3_seeded(value.as_bytes(), &self.secrets);
let buffer = crate::redactors::u64_to_hex_array::<REDACTED_LEN>(hash);
write!(output, "{}", unsafe { core::str::from_utf8_unchecked(&buffer) })
}
}