use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize)]
pub struct DockerInfo {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "ServerVersion")]
pub server_version: String,
#[serde(rename = "OperatingSystem")]
pub operating_system: String,
#[serde(rename = "Architecture")]
pub architecture: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ImageInspect {
#[serde(rename = "Id")]
pub id: String,
#[serde(rename = "RepoTags", default)]
pub repo_tags: Vec<String>,
#[serde(rename = "RepoDigests", default)]
pub repo_digests: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VolumeInspect {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Driver")]
pub driver: String,
#[serde(rename = "Labels", default)]
pub labels: Option<HashMap<String, String>>,
#[serde(rename = "Options", default)]
pub options: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct NetworkInspect {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Id")]
pub id: String,
#[serde(rename = "Driver")]
pub driver: String,
#[serde(rename = "Internal", default)]
pub internal: bool,
#[serde(rename = "EnableIPv6", default)]
pub enable_ipv6: bool,
#[serde(rename = "Attachable", default)]
pub attachable: bool,
#[serde(rename = "Labels", default)]
pub labels: Option<HashMap<String, String>>,
#[serde(rename = "Options", default)]
pub options: Option<HashMap<String, String>>,
#[serde(rename = "IPAM", default)]
pub ipam: NetworkIpam,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct NetworkIpam {
#[serde(rename = "Driver", default)]
pub driver: String,
#[serde(rename = "Config", default)]
pub config: Vec<NetworkIpamConfig>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq)]
pub struct NetworkIpamConfig {
#[serde(rename = "Subnet", default)]
pub subnet: String,
#[serde(rename = "Gateway", default)]
pub gateway: String,
#[serde(rename = "IPRange", default)]
pub ip_range: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ContainerInspect {
#[serde(rename = "Id")]
pub id: String,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Image")]
pub image: String,
#[serde(rename = "Created", default)]
pub created: String,
#[serde(rename = "State")]
pub state: ContainerState,
#[serde(rename = "Config")]
pub config: ContainerConfig,
#[serde(rename = "HostConfig")]
pub host_config: HostConfig,
#[serde(rename = "NetworkSettings")]
pub network_settings: NetworkSettings,
#[serde(rename = "Mounts", default)]
pub mounts: Vec<MountPoint>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ContainerState {
#[serde(rename = "Status")]
pub status: String,
#[serde(rename = "Running", default)]
pub running: bool,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct ContainerConfig {
#[serde(rename = "Hostname", default)]
pub hostname: String,
#[serde(rename = "Domainname", default)]
pub domainname: String,
#[serde(rename = "User", default)]
pub user: String,
#[serde(rename = "Env", default)]
pub env: Option<Vec<String>>,
#[serde(rename = "Cmd", default)]
pub cmd: Option<Vec<String>>,
#[serde(rename = "Image", default)]
pub image: String,
#[serde(rename = "WorkingDir", default)]
pub working_dir: String,
#[serde(rename = "Entrypoint", default)]
pub entrypoint: Option<Vec<String>>,
#[serde(rename = "Labels", default)]
pub labels: Option<HashMap<String, String>>,
#[serde(rename = "Tty", default)]
pub tty: bool,
#[serde(rename = "OpenStdin", default)]
pub open_stdin: bool,
#[serde(rename = "ExposedPorts", default)]
pub exposed_ports: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct HostConfig {
#[serde(rename = "NetworkMode", default)]
pub network_mode: String,
#[serde(rename = "PortBindings", default)]
pub port_bindings: Option<HashMap<String, Option<Vec<PortBinding>>>>,
#[serde(rename = "RestartPolicy", default)]
pub restart_policy: Option<RestartPolicy>,
#[serde(rename = "Privileged", default)]
pub privileged: bool,
#[serde(rename = "ReadonlyRootfs", default)]
pub readonly_rootfs: bool,
#[serde(rename = "ExtraHosts", default)]
pub extra_hosts: Option<Vec<String>>,
#[serde(rename = "AutoRemove", default)]
pub auto_remove: bool,
#[serde(rename = "Memory", default)]
pub memory: i64,
#[serde(rename = "NanoCpus", default)]
pub nano_cpus: i64,
#[serde(rename = "CapAdd", default)]
pub cap_add: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct RestartPolicy {
#[serde(rename = "Name", default)]
pub name: String,
#[serde(rename = "MaximumRetryCount", default)]
pub maximum_retry_count: i64,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct NetworkSettings {
#[serde(rename = "Networks", default)]
pub networks: HashMap<String, EndpointSettings>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct EndpointSettings {
#[serde(rename = "Aliases", default)]
pub aliases: Option<Vec<String>>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MountPoint {
#[serde(rename = "Type")]
pub mount_type: String,
#[serde(rename = "Name", default)]
pub name: String,
#[serde(rename = "Source", default)]
pub source: String,
#[serde(rename = "Destination")]
pub destination: String,
#[serde(rename = "Mode", default)]
pub mode: String,
#[serde(rename = "RW", default)]
pub rw: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PortBinding {
#[serde(rename = "HostIp", default)]
pub host_ip: String,
#[serde(rename = "HostPort", default)]
pub host_port: String,
}