Skip to main content

earl_protocol_bash/
schema.rs

1use std::collections::BTreeMap;
2
3use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7use earl_core::schema::TransportTemplate;
8use earl_core::with::AsJson;
9
10#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
11#[serde(deny_unknown_fields)]
12pub struct BashOperationTemplate {
13    pub bash: BashScriptTemplate,
14    #[serde(default)]
15    pub stream: bool,
16    pub transport: Option<TransportTemplate>,
17}
18
19#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
20#[serde(deny_unknown_fields)]
21pub struct BashScriptTemplate {
22    pub script: String,
23    #[rkyv(with = AsJson)]
24    #[serde(default)]
25    pub env: Option<BTreeMap<String, Value>>,
26    pub cwd: Option<String>,
27    pub sandbox: Option<BashSandboxTemplate>,
28}
29
30#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
31#[serde(deny_unknown_fields)]
32pub struct BashSandboxTemplate {
33    pub network: Option<bool>,
34    pub writable_paths: Option<Vec<String>>,
35    pub max_time_ms: Option<u64>,
36    pub max_output_bytes: Option<u64>,
37    pub max_memory_bytes: Option<u64>,
38    pub max_cpu_time_ms: Option<u64>,
39}