execra 0.1.2

DO NOT DEPEND ON THIS CRATE — in heavy testing inside rScoop. Typed job runtime for external processes: phases, progress, findings, persistence, and per-job cancellation.
Documentation
use std::path::PathBuf;
use std::time::Duration;

#[derive(Debug, Clone)]
pub struct Config {
    pub db_path: PathBuf,
    pub log_dir: PathBuf,
    pub raw_output: RawOutputPolicy,
    pub retention: RetentionPolicy,
    pub max_concurrent: usize,
    pub default_grace_period: Duration,
}

impl Default for Config {
    fn default() -> Self {
        Config {
            db_path: PathBuf::from("execra.db"),
            log_dir: PathBuf::from("execra-logs"),
            raw_output: RawOutputPolicy::Persist,
            retention: RetentionPolicy::default(),
            max_concurrent: std::thread::available_parallelism()
                .map(|n| n.get())
                .unwrap_or(4),
            default_grace_period: Duration::from_secs(5),
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RawOutputPolicy {
    Persist,
    #[cfg(feature = "gzip")]
    PersistGzipOnFinalize,
    MemoryOnly,
    Disabled,
}

#[derive(Debug, Clone)]
pub struct RetentionPolicy {
    pub keep_events_for: Duration,
    pub keep_raw_for: Duration,
    pub pinned_tag: String,
}

impl Default for RetentionPolicy {
    fn default() -> Self {
        RetentionPolicy {
            keep_events_for: Duration::from_secs(60 * 60 * 24 * 30),
            keep_raw_for: Duration::from_secs(60 * 60 * 24 * 7),
            pinned_tag: "pinned".into(),
        }
    }
}