use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ZipProjectNetworkAccess {
Disabled,
Loopback,
Enabled,
}
impl ZipProjectNetworkAccess {
pub fn docker_network_mode(self) -> DockerNetworkMode {
match self {
Self::Disabled | Self::Loopback => DockerNetworkMode::None,
Self::Enabled => DockerNetworkMode::Bridge,
}
}
pub fn clamp_to(self, maximum: Self) -> Self {
if self.rank() <= maximum.rank() {
self
} else {
maximum
}
}
fn rank(self) -> u8 {
match self {
Self::Disabled => 0,
Self::Loopback => 1,
Self::Enabled => 2,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DockerNetworkMode {
None,
Bridge,
}
impl DockerNetworkMode {
pub fn as_str(self) -> &'static str {
match self {
Self::None => "none",
Self::Bridge => "bridge",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ZipProjectPhaseLimits {
pub timeout_sec: u64,
pub memory_limit_mb: u64,
pub cpu_limit_millis: u32,
pub disk_limit_mb: u64,
pub network_access: ZipProjectNetworkAccess,
}