use std::ffi::OsStr;
use std::iter::once;
use super::Redactor;
use crate::RedactionInspection;
use crate::RedactionInspectionError;
use crate::RedactionTextOutput;
impl Redactor {
#[must_use]
#[inline]
pub fn redact_argv<'items, I>(&self, items: I) -> RedactionTextOutput
where
I: IntoIterator<Item = crate::formats::argv::ArgvItem<'items>>,
{
let mut session = self.text_runtime();
session.argv(|argv| {
let _ = argv.items(items);
});
session.finish()
}
#[inline]
pub fn inspect_argv<'items, I>(&self, items: I) -> Result<RedactionInspection, RedactionInspectionError>
where
I: IntoIterator<Item = crate::formats::argv::ArgvItem<'items>>,
{
let mut session = self.inspection_runtime();
crate::formats::argv::inspection::inspect_items(&mut session, items, false);
session.finish()
}
#[must_use]
#[inline]
pub fn redact_heuristic_argv<'items, I>(&self, items: I) -> RedactionTextOutput
where
I: IntoIterator<Item = crate::formats::argv::ArgvItem<'items>>,
{
let mut session = self.text_runtime();
session.argv(|argv| {
let _ = argv.heuristic_items(items);
});
session.finish()
}
#[inline]
pub fn inspect_heuristic_argv<'items, I>(&self, items: I) -> Result<RedactionInspection, RedactionInspectionError>
where
I: IntoIterator<Item = crate::formats::argv::ArgvItem<'items>>,
{
let mut session = self.inspection_runtime();
crate::formats::argv::inspection::inspect_items(&mut session, items, true);
session.finish()
}
#[must_use]
#[inline]
pub fn redact_env(&self, name: &str, value: &str) -> RedactionTextOutput {
let mut session = self.text_runtime();
session.env(|environment| {
let _ = environment.pair(name, value);
});
session.finish()
}
#[inline]
pub fn inspect_env(&self, name: &str, value: &str) -> Result<RedactionInspection, RedactionInspectionError> {
let mut session = self.inspection_runtime();
crate::formats::env::inspection::inspect_pair(&mut session, name, value);
session.finish()
}
#[must_use]
#[inline]
pub fn redact_env_pairs<'items, I>(&self, pairs: I) -> RedactionTextOutput
where
I: IntoIterator<Item = (&'items OsStr, &'items OsStr)>,
{
let mut session = self.text_runtime();
session.env(|environment| {
let _ = environment.os_pairs(pairs);
});
session.finish()
}
#[inline]
pub fn inspect_env_pairs<'items, I>(&self, pairs: I) -> Result<RedactionInspection, RedactionInspectionError>
where
I: IntoIterator<Item = (&'items OsStr, &'items OsStr)>,
{
let mut session = self.inspection_runtime();
crate::formats::env::inspection::inspect_os_pairs(&mut session, pairs);
session.finish()
}
#[must_use]
#[inline]
pub fn redact_process<'arguments, 'variables, A, E>(
&self,
program: &'arguments OsStr,
arguments: A,
variables: E,
) -> RedactionTextOutput
where
A: IntoIterator<Item = crate::formats::argv::ArgvItem<'arguments>>,
E: IntoIterator<Item = (&'variables OsStr, &'variables OsStr)>,
{
let mut session = self.text_runtime();
let _ = session.process(|process| {
let _ = process.command(program, arguments, variables);
});
session.finish()
}
#[inline]
pub fn inspect_process<'arguments, 'variables, A, E>(
&self,
program: &'arguments OsStr,
arguments: A,
variables: E,
) -> Result<RedactionInspection, RedactionInspectionError>
where
A: IntoIterator<Item = crate::formats::argv::ArgvItem<'arguments>>,
E: IntoIterator<Item = (&'variables OsStr, &'variables OsStr)>,
{
let mut session = self.inspection_runtime();
let command = once(crate::formats::argv::ArgvItem::plain(program)).chain(arguments);
crate::formats::argv::inspection::inspect_items(&mut session, command, true);
crate::formats::env::inspection::inspect_os_pairs(&mut session, variables);
session.finish()
}
}