use alloc::string::String;
use alloc::vec::Vec;
use core::fmt::{Display, Formatter};
mod runmount;
pub use runmount::{
RunMount, RunMountBind, RunMountBindOpts, RunMountCache, RunMountCacheOpts, RunMountSSH,
RunMountSSHOpts, RunMountSecret, RunMountSecretOpts, RunMountTmpfs, RunMountTmpfsOpts,
RunSharing,
};
#[derive(Debug, Clone)]
pub struct Run {
pub argv: Vec<String>,
pub mounts: Vec<runmount::RunMount>,
pub network: Option<RunNetwork>,
pub security: Option<RunSecurity>,
}
impl Display for Run {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "RUN ")?;
for i in &self.mounts {
match i {
RunMount::Bind(b) => write!(f, "{b} "),
RunMount::Cache(c) => write!(f, "{c} "),
RunMount::Tmpfs(t) => write!(f, "{t} "),
RunMount::Secret(s) => write!(f, "{s} "),
RunMount::Ssh(s) => write!(f, "{s} "),
}?;
}
match &self.network {
Some(n) => write!(f, "{n} ")?,
None => {}
};
match &self.security {
Some(s) => write!(f, "{s} ")?,
None => {}
}
write!(f, "[")?;
for (i, arg) in self.argv.iter().enumerate() {
if i != 0 {
write!(f, ", ")?;
}
write!(f, r#""{arg}""#)?;
}
write!(f, "]")?;
Ok(())
}
}
#[derive(Debug, Clone)]
pub enum RunSecurity {
Sandbox,
Insecure,
}
impl Display for RunSecurity {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
match self {
RunSecurity::Sandbox => write!(f, "--security=sandbox"),
RunSecurity::Insecure => write!(f, "--security=insecure"),
}
}
}
#[derive(Debug, Clone)]
pub enum RunNetwork {
Default,
None,
Host,
}
impl Display for RunNetwork {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
match self {
RunNetwork::Default => write!(f, "--network=default"),
RunNetwork::None => write!(f, "--network=none"),
RunNetwork::Host => write!(f, "--network=host"),
}
}
}