use std::{
borrow::Cow,
fmt::{
self,
Display,
Formatter,
},
};
use crate::{
InputOutputLimit,
LogSafeText,
};
use super::redacted_argv_builder::RedactedArgvBuilder;
#[must_use = "render the redacted argv instead of the original arguments"]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RedactedArgv {
rendered: LogSafeText<'static>,
}
impl RedactedArgv {
#[inline]
pub(super) fn builder(budget: InputOutputLimit) -> RedactedArgvBuilder {
RedactedArgvBuilder::new(budget)
}
#[inline(always)]
pub(super) fn from_rendered(rendered: String) -> Self {
Self {
rendered: LogSafeText::from_escaped(Cow::Owned(rendered)),
}
}
#[inline(always)]
pub const fn as_log_safe_text(&self) -> &LogSafeText<'static> {
&self.rendered
}
}
impl Display for RedactedArgv {
#[inline(always)]
fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
Display::fmt(&self.rendered, formatter)
}
}