use super::MaskPolicy;
use super::MaskingPolicy;
use crate::Sensitivity;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MaskingPolicyBuilder {
low: MaskPolicy,
medium: MaskPolicy,
high: MaskPolicy,
secret: MaskPolicy,
}
impl MaskingPolicyBuilder {
#[must_use]
#[inline(always)]
pub(super) fn from_policy(policy: &MaskingPolicy) -> Self {
Self {
low: policy.for_level(Sensitivity::Low).clone(),
medium: policy.for_level(Sensitivity::Medium).clone(),
high: policy.for_level(Sensitivity::High).clone(),
secret: policy.for_level(Sensitivity::Secret).clone(),
}
}
#[inline(always)]
pub fn low(&mut self, policy: MaskPolicy) -> &mut Self {
self.low = policy;
self
}
#[inline(always)]
pub fn medium(&mut self, policy: MaskPolicy) -> &mut Self {
self.medium = policy;
self
}
#[inline(always)]
pub fn high(&mut self, policy: MaskPolicy) -> &mut Self {
self.high = policy;
self
}
#[inline(always)]
pub fn secret(&mut self, policy: MaskPolicy) -> &mut Self {
self.secret = policy;
self
}
#[must_use]
#[inline(always)]
pub fn build(self) -> MaskingPolicy {
MaskingPolicy::from_parts(self.low, self.medium, self.high, self.secret)
}
#[inline]
pub(crate) fn policy(&mut self, level: Sensitivity, policy: MaskPolicy) {
match level {
Sensitivity::Low => self.low(policy),
Sensitivity::Medium => self.medium(policy),
Sensitivity::High => self.high(policy),
Sensitivity::Secret => self.secret(policy),
};
}
}
impl Default for MaskingPolicyBuilder {
#[inline(always)]
fn default() -> Self {
Self {
low: MaskPolicy::preserve_edges(2, 2, "****", 4),
medium: MaskPolicy::preserve_suffix(1, "*******", 1),
high: MaskPolicy::fixed("****"),
secret: MaskPolicy::fixed("<redacted>"),
}
}
}