use std::{
ffi::OsStr,
fmt,
};
use crate::Sensitivity;
#[must_use = "pass the item to an argv redactor"]
#[derive(Clone, Copy)]
pub struct ArgvItem<'a> {
value: &'a OsStr,
sensitivity: Option<Sensitivity>,
}
impl fmt::Debug for ArgvItem<'_> {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter
.debug_struct("ArgvItem")
.field("value", &"<redacted>")
.field("value_len", &self.value.as_encoded_bytes().len())
.field("sensitivity", &self.sensitivity)
.finish()
}
}
impl<'a> ArgvItem<'a> {
#[inline(always)]
pub const fn plain(value: &'a OsStr) -> Self {
Self {
value,
sensitivity: None,
}
}
#[inline(always)]
pub const fn sensitive(value: &'a OsStr, sensitivity: Sensitivity) -> Self {
Self {
value,
sensitivity: Some(sensitivity),
}
}
#[inline(always)]
pub(super) const fn value(&self) -> &'a OsStr {
self.value
}
#[inline(always)]
pub(super) const fn sensitivity(&self) -> Option<Sensitivity> {
self.sensitivity
}
}