use super::MaskingPolicy;
use super::PolicyError;
use super::PolicyLocation;
use super::RedactionFloor;
use super::RedactionPolicyBuilder;
use super::Sensitivity;
use crate::policy::FieldNameMatching;
use crate::policy::MaskPolicy;
use crate::policy::SensitiveFieldPreset;
use crate::policy::UnknownFieldPolicy;
pub struct FieldsBuilder<'a> {
pub(super) builder: &'a mut RedactionPolicyBuilder,
pub(super) error: Option<PolicyError>,
}
impl FieldsBuilder<'_> {
#[inline(always)]
pub fn low_sensitive(&mut self, field: &str) -> &mut Self {
self.set_sensitive(field, Sensitivity::Low)
}
#[inline(always)]
pub fn medium_sensitive(&mut self, field: &str) -> &mut Self {
self.set_sensitive(field, Sensitivity::Medium)
}
#[inline(always)]
pub fn high_sensitive(&mut self, field: &str) -> &mut Self {
self.set_sensitive(field, Sensitivity::High)
}
#[inline(always)]
pub fn secret_sensitive(&mut self, field: &str) -> &mut Self {
self.set_sensitive(field, Sensitivity::Secret)
}
#[inline(always)]
pub fn sensitive(&mut self, level: Sensitivity, field: &str) -> &mut Self {
self.set_sensitive(field, level)
}
#[inline(always)]
pub fn matching(&mut self, matching: FieldNameMatching) -> &mut Self {
self.builder.rules.matching(matching);
self
}
#[inline(always)]
pub fn unknown_field_policy(&mut self, policy: UnknownFieldPolicy) -> &mut Self {
self.builder.rules.unknown_field_policy(policy);
self
}
#[inline(always)]
pub fn include_preset(&mut self, preset: SensitiveFieldPreset) -> &mut Self {
self.builder.rules.include_preset(preset);
self
}
pub fn raise(&mut self, field: &str, level: Sensitivity) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.raise(field, level)
{
self.error = Some(error);
}
self
}
pub fn override_level(&mut self, field: &str, level: Sensitivity) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.override_level(field, level)
{
self.error = Some(error);
}
self
}
pub fn allow_exact(&mut self, field: &str) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.allow_canonical_exact(field)
{
self.error = Some(error);
}
self
}
pub fn allow_suffix(&mut self, field: &str) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.allow_suffix(field)
{
self.error = Some(error);
}
self
}
pub fn remove_allow_exact(&mut self, field: &str) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.remove_allow_canonical_exact(field)
{
self.error = Some(error);
}
self
}
pub fn remove_allow_suffix(&mut self, field: &str) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.remove_allow_suffix(field)
{
self.error = Some(error);
}
self
}
#[inline(always)]
pub fn clear_allow_rules(&mut self) -> &mut Self {
self.builder.rules.clear_allow_rules();
self
}
#[inline(always)]
pub fn floor(&mut self, floor: RedactionFloor) -> &mut Self {
self.builder.floor = Some(floor);
self
}
#[inline(always)]
pub fn disable_floor(&mut self) -> &mut Self {
self.builder.floor = None;
self
}
pub fn mask(&mut self, level: Sensitivity, policy: MaskPolicy) -> &mut Self {
let mut masking = MaskingPolicy::builder_from(&self.builder.masking);
masking.policy(level, policy);
let masking = masking.build();
if self.error.is_none() {
match masking.validate(PolicyLocation::Rules) {
Ok(()) => self.builder.masking = masking,
Err(error) => self.error = Some(error),
}
}
self
}
#[inline(always)]
fn set_sensitive(&mut self, field: &str, level: Sensitivity) -> &mut Self {
if self.error.is_none()
&& let Err(error) = self.builder.rules.raise(field, level)
{
self.error = Some(error);
}
self
}
}