use std::{
borrow::Cow,
fmt::{
self,
Display,
Formatter,
},
};
use crate::LogSafeText;
use super::BodyRedactionStatus;
#[must_use = "inspect or render the redacted body instead of discarding it"]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BodyRedaction {
text: LogSafeText<'static>,
status: BodyRedactionStatus,
captured_len: usize,
source_len: Option<usize>,
omitted_len: Option<usize>,
truncated: bool,
}
impl BodyRedaction {
#[inline(always)]
pub(super) fn new(
text: String,
status: BodyRedactionStatus,
captured_len: usize,
source_len: Option<usize>,
omitted_len: Option<usize>,
truncated: bool,
) -> Self {
Self {
text: LogSafeText::from_escaped(Cow::Owned(text)),
status,
captured_len,
source_len,
omitted_len,
truncated,
}
}
#[inline]
pub const fn log_safe_text(&self) -> &LogSafeText<'static> {
&self.text
}
#[inline(always)]
pub fn into_log_safe_text(self) -> LogSafeText<'static> {
self.text
}
#[inline(always)]
pub const fn status(&self) -> BodyRedactionStatus {
self.status
}
#[must_use]
#[inline]
pub const fn captured_len(&self) -> usize {
self.captured_len
}
#[inline(always)]
pub const fn source_len(&self) -> Option<usize> {
self.source_len
}
#[inline]
pub const fn omitted_len(&self) -> Option<usize> {
self.omitted_len
}
#[must_use]
#[inline]
pub const fn is_truncated(&self) -> bool {
self.truncated
}
}
impl Display for BodyRedaction {
#[inline(always)]
fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
Display::fmt(&self.text, formatter)
}
}