use std::time::Duration;
use super::io::{InputPolicy, ProcessIo};
use super::redaction::ArgRedaction;
use super::signal::SignalPolicy;
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct ProcessConfig {
pub timeout: Option<Duration>,
pub io: ProcessIo,
pub signal: SignalPolicy,
pub arg_redaction: ArgRedaction,
}
impl Default for ProcessConfig {
fn default() -> Self {
Self {
timeout: Some(Duration::from_secs(30)),
io: ProcessIo::default(),
signal: SignalPolicy::default(),
arg_redaction: ArgRedaction::default(),
}
}
}
impl ProcessConfig {
#[must_use]
pub fn with_timeout(mut self, timeout: Option<Duration>) -> Self {
self.timeout = timeout;
self
}
#[must_use]
pub fn with_io(mut self, io: ProcessIo) -> Self {
self.io = io;
self
}
#[must_use]
pub fn with_signal_policy(mut self, signal: SignalPolicy) -> Self {
self.signal = signal;
self
}
#[must_use]
pub fn with_arg_redaction(mut self, arg_redaction: ArgRedaction) -> Self {
self.arg_redaction = arg_redaction;
self
}
#[must_use]
pub fn with_sensitive_arg_name(mut self, name: impl AsRef<str>) -> Self {
self.arg_redaction = self.arg_redaction.with_name(name);
self
}
#[must_use]
pub fn with_max_output_bytes(mut self, bytes: usize) -> Self {
match &mut self.io {
ProcessIo::Captured(io) => io.output.max_output_bytes = Some(bytes),
ProcessIo::Observed(io) => io.output.max_output_bytes = Some(bytes),
#[cfg(unix)]
ProcessIo::Pty(io) => io.output.max_output_bytes = Some(bytes),
ProcessIo::Inherited(_) => {}
}
self
}
#[must_use]
pub fn with_unbounded_output(mut self) -> Self {
match &mut self.io {
ProcessIo::Captured(io) => io.output.max_output_bytes = None,
ProcessIo::Observed(io) => io.output.max_output_bytes = None,
#[cfg(unix)]
ProcessIo::Pty(io) => io.output.max_output_bytes = None,
ProcessIo::Inherited(_) => {}
}
self
}
#[must_use]
pub fn with_input(mut self, input: InputPolicy) -> Self {
match &mut self.io {
ProcessIo::Captured(io) => io.input = input,
ProcessIo::Observed(io) => io.input = input,
#[cfg(unix)]
ProcessIo::Pty(io) => io.input = input,
ProcessIo::Inherited(io) => io.input = input,
}
self
}
}