pub mod chain;
pub mod classifier;
use crate::signal::SignalKind;
#[derive(Debug, Clone)]
pub enum InterceptDecision {
Capture(CaptureOpts),
Passthrough,
Reject(String),
}
#[derive(Debug, Clone, Default)]
pub struct CaptureOpts {
pub capture_stderr: bool,
pub timeout_secs: u64,
}
impl Default for InterceptDecision {
fn default() -> Self {
Self::Capture(CaptureOpts {
capture_stderr: true,
timeout_secs: 30,
})
}
}
pub trait CommandInterceptor: Send + Sync {
fn intercept(&self, program: &str, args: &[String]) -> InterceptDecision;
}
pub struct DefaultInterceptor;
impl CommandInterceptor for DefaultInterceptor {
fn intercept(&self, program: &str, args: &[String]) -> InterceptDecision {
let kind = SignalKind::from_program(program, args);
match kind {
SignalKind::Unknown => InterceptDecision::Passthrough,
_ => InterceptDecision::Capture(CaptureOpts {
capture_stderr: true,
timeout_secs: 60,
}),
}
}
}