earl-protocol-bash 0.6.3

Bash sandboxed execution protocol for earl
Documentation
use std::collections::BTreeMap;

use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
use serde::{Deserialize, Serialize};
use serde_json::Value;

use earl_core::schema::TransportTemplate;
use earl_core::with::AsJson;

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct BashOperationTemplate {
    pub bash: BashScriptTemplate,
    #[serde(default)]
    pub stream: bool,
    pub transport: Option<TransportTemplate>,
}

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct BashScriptTemplate {
    pub script: String,
    #[rkyv(with = AsJson)]
    #[serde(default)]
    pub env: Option<BTreeMap<String, Value>>,
    pub cwd: Option<String>,
    pub sandbox: Option<BashSandboxTemplate>,
}

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct BashSandboxTemplate {
    pub network: Option<bool>,
    pub writable_paths: Option<Vec<String>>,
    pub max_time_ms: Option<u64>,
    pub max_output_bytes: Option<u64>,
    pub max_memory_bytes: Option<u64>,
    pub max_cpu_time_ms: Option<u64>,
}