#[cfg(target_os = "linux")]
use std::sync::Arc;
#[cfg(target_os = "macos")]
pub(crate) mod container_cfg;
#[cfg(target_os = "linux")]
pub(crate) mod docker_client;
#[cfg(target_os = "linux")]
pub(crate) mod docker_log_stream;
#[cfg(target_os = "linux")]
pub(crate) mod docker_tar;
pub(crate) mod http_decode;
#[cfg(target_os = "macos")]
pub(crate) mod image_config;
#[cfg(target_os = "linux")]
pub(crate) mod registry_auth;
#[cfg(target_os = "macos")]
pub(crate) mod xpc_client;
#[cfg(target_os = "linux")]
pub(crate) use docker_client::DockerClient;
#[cfg(target_os = "macos")]
pub(crate) use xpc_client::XpcClient;
#[cfg(target_os = "linux")]
use std::collections::BTreeMap;
use crate::core::error::Result;
#[cfg(target_os = "linux")]
use crate::core::healthcheck::Healthcheck;
#[cfg(target_os = "linux")]
use crate::core::mounts::Mount;
use crate::core::ports::Ports;
#[derive(Debug, Clone, Default)]
pub(crate) struct ContainerSnapshot {
pub(crate) running: bool,
pub(crate) ports: Ports,
}
#[cfg(target_os = "linux")]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum HealthStatus {
Starting,
Healthy,
Unhealthy,
}
#[cfg(target_os = "linux")]
#[derive(Debug, Clone)]
pub(crate) struct HealthProbe {
pub(crate) running: bool,
pub(crate) health: Option<HealthStatus>,
}
#[cfg(target_os = "linux")]
pub(crate) struct ContainerConfig {
pub image: String,
pub entrypoint: Option<Vec<String>>,
pub cmd: Vec<String>,
pub env: Vec<String>,
pub ports: Vec<crate::core::containers::request::PortMapping>,
pub mounts: Vec<Mount>,
pub name: Option<String>,
pub labels: BTreeMap<String, String>,
pub privileged: bool,
pub working_dir: Option<String>,
pub user: Option<String>,
pub init: bool,
pub health_check: Option<Healthcheck>,
pub cap_add: Vec<String>,
pub cap_drop: Vec<String>,
pub shm_size: Option<u64>,
pub readonly_rootfs: bool,
pub hostname: Option<String>,
pub open_stdin: Option<bool>,
pub network: Option<String>,
pub platform: Option<String>,
pub extra_hosts: Vec<String>,
}
#[derive(Clone)]
pub(crate) enum Client {
#[cfg(target_os = "macos")]
MacOs(XpcClient),
#[cfg(target_os = "linux")]
Linux(Arc<DockerClient>),
}
impl Client {
pub fn detect() -> Result<Self> {
#[cfg(target_os = "macos")]
{
Ok(Self::MacOs(XpcClient))
}
#[cfg(target_os = "linux")]
{
Ok(Self::Linux(Arc::new(DockerClient::detect()?)))
}
}
}