use super::ArgvItem;
use super::redaction::redact_heuristically_with_policy;
use super::redaction::redact_items_with_policy;
use crate::runtime::TextSession;
use crate::runtime::collect_flat_format_items;
use crate::runtime::runtime_session::RuntimeSession;
pub struct ArgvRedactionWriter<'session> {
session: &'session mut TextSession,
}
impl<'session> ArgvRedactionWriter<'session> {
#[inline(always)]
#[must_use]
pub(crate) const fn new(session: &'session mut TextSession) -> Self {
Self { session }
}
pub fn items<'items, I>(&mut self, items: I) -> &mut Self
where
I: IntoIterator<Item = ArgvItem<'items>>,
{
if self.session.skip_aggregate_for_exhausted_output() {
return self;
}
let Some(items) = collect_flat_format_items(self.session, items, |item| item.value().as_encoded_bytes().len())
else {
return self;
};
let result = redact_items_with_policy(self.session.policy(), items, self.session.remaining_output_bytes());
self.session.append_rendered_operation(result);
self
}
pub fn heuristic_items<'items, I>(&mut self, items: I) -> &mut Self
where
I: IntoIterator<Item = ArgvItem<'items>>,
{
if self.session.skip_aggregate_for_exhausted_output() {
return self;
}
let Some(items) = collect_flat_format_items(self.session, items, |item| item.value().as_encoded_bytes().len())
else {
return self;
};
let result =
redact_heuristically_with_policy(self.session.policy(), items, self.session.remaining_output_bytes());
self.session.append_rendered_operation(result);
self
}
}