use std::fmt::Display;
use crate::RedactionTextOutput;
use crate::domain::Redact;
use crate::runtime::TextSession;
pub struct RedactedTextComposer {
session: TextSession,
}
impl RedactedTextComposer {
#[must_use]
#[inline(always)]
pub(crate) const fn from_session(session: TextSession) -> Self {
Self { session }
}
#[must_use]
#[inline(always)]
pub fn literal(mut self, text: &'static str) -> Self {
let _ = self.session.literal(text);
self
}
#[must_use]
#[inline(always)]
pub fn field<T>(mut self, field: &str, value: &T) -> Self
where
T: Display + ?Sized,
{
let _ = self.session.field(field, value);
self
}
#[must_use]
#[inline(always)]
pub fn value<T>(mut self, value: &T) -> Self
where
T: Redact + ?Sized,
{
let _ = self.session.value(value);
self
}
#[must_use]
#[inline(always)]
pub fn argv<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::argv::ArgvRedactionWriter<'session>),
{
self.session.argv(configure);
self
}
#[must_use]
#[inline(always)]
pub fn env<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::env::EnvRedactionWriter<'session>),
{
self.session.env(configure);
self
}
#[must_use]
#[inline(always)]
pub fn process<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::process::ProcessRedactionWriter<'session>),
{
let _ = self.session.process(configure);
self
}
#[cfg(feature = "json")]
#[must_use]
#[inline(always)]
pub fn json<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::json::JsonRedactionWriter<'session>),
{
let _ = self.session.json(configure);
self
}
#[cfg(feature = "http")]
#[must_use]
#[inline(always)]
pub fn http<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::http::HttpRedactionWriter<'session>),
{
let _ = self.session.http(configure);
self
}
#[cfg(feature = "uri")]
#[must_use]
#[inline(always)]
pub fn uri<F>(mut self, configure: F) -> Self
where
F: for<'session> FnOnce(&mut crate::formats::uri::UriRedactionWriter<'session>),
{
let _ = self.session.uri(configure);
self
}
#[must_use]
#[inline(always)]
pub fn finish(self) -> RedactionTextOutput {
self.session.finish()
}
}