use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PortBinding {
pub host_ip: String,
pub host_port: u16,
pub container_port: u16,
pub protocol: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerConfig {
pub name: Option<String>,
pub image: String,
pub cmd: Vec<String>,
pub entrypoint: Vec<String>,
pub env: HashMap<String, String>,
pub working_dir: Option<String>,
pub user: Option<String>,
pub exposed_ports: Vec<String>,
pub port_bindings: Vec<PortBinding>,
pub volumes: Vec<VolumeMount>,
pub resources: ResourceLimits,
pub labels: HashMap<String, String>,
pub restart_policy: RestartPolicy,
pub tty: Option<bool>,
pub open_stdin: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VolumeMount {
pub source: String,
pub target: String,
pub read_only: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResourceLimits {
pub cpu_limit: Option<u64>,
pub memory_limit: Option<u64>,
pub memory_reservation: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum RestartPolicy {
#[default]
No,
Always,
OnFailure,
UnlessStopped,
}