podman-client 0.0.2

A native Rust client for the Podman REST API over Unix sockets
Documentation
use core::fmt;
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use crate::models::podman::common::{
    id_mapping_options::IdMappingOptions, image_volume::ImageVolume,
    linux_device_cgroup::LinuxDeviceCgroup, linux_resources::LinuxResources,
    linux_throttle_device::LinuxThrottleDevice, linux_weight_device::LinuxWeightDevice,
    named_volume::NamedVolume, namespace::Namespace, overlay_volume::OverlayVolume,
    per_network_options::PerNetworkOptions, port_mapping::PortMapping,
    schema2_health_config::Schema2HealthConfig, volume_mount::VolumeMount,
};

#[derive(Serialize, Default)]
pub struct ContainerCreateOptions {
    pub annotations: Option<HashMap<String, String>>,
    pub apparmor_profile: Option<String>,
    pub artifact_volumes: Option<Vec<ContainerCreateArtifactVolumeOptions>>,
    pub base_hosts_file: Option<String>,
    pub cap_add: Option<Vec<String>>,
    pub cap_drop: Option<Vec<String>>,
    pub cgroup_parent: Option<String>,
    pub cgroupns: Option<Namespace>,
    pub cgroups_mode: Option<String>,
    pub chroot_directories: Option<Vec<String>>,
    pub cni_networks: Option<Vec<String>>,
    pub command: Option<Vec<String>>,
    pub conmon_pid_file: Option<String>,
    #[serde(rename = "containerCreateCommand")]
    pub container_create_command: Option<Vec<String>>,
    pub create_working_dir: Option<bool>,
    #[serde(rename = "dependencyContainers")]
    pub dependency_containers: Option<Vec<String>>,
    pub device_cgroup_rule: Option<Vec<LinuxDeviceCgroup>>,
    pub devices: Option<Vec<ContainerCreateLinuxDeviceOptions>>,
    pub devices_from: Option<Vec<String>>,
    pub dns_option: Option<Vec<String>>,
    pub dns_search: Option<Vec<String>>,
    pub dns_server: Option<Vec<String>>,
    pub entrypoint: Option<Vec<String>>,
    pub env: Option<HashMap<String, String>>,
    pub env_host: Option<bool>,
    pub envmerge: Option<Vec<String>>,
    pub expose: Option<HashMap<u16, String>>,
    pub group_entry: Option<String>,
    pub groups: Option<Vec<String>>,
    pub health_check_on_failure_action: Option<i64>,
    pub healthconfig: Option<Schema2HealthConfig>,
    #[serde(rename = "healthLogDestination")]
    pub health_log_destination: Option<String>,
    #[serde(rename = "healthMaxLogCount")]
    pub health_max_log_count: Option<u64>,
    #[serde(rename = "healthMaxLogSize")]
    pub health_max_log_size: Option<u64>,
    pub host_device_list: Option<Vec<ContainerCreateLinuxDeviceOptions>>,
    pub hostadd: Option<Vec<String>>,
    pub hostname: Option<String>,
    pub hostusers: Option<Vec<String>>,
    pub httpproxy: Option<bool>,
    pub idmappings: Option<IdMappingOptions>,
    pub image: Option<String>,
    pub image_arch: Option<String>,
    pub image_os: Option<String>,
    pub image_variant: Option<String>,
    pub image_volume_mode: Option<String>,
    pub image_volumes: Option<Vec<ImageVolume>>,
    pub init: Option<bool>,
    pub init_container_type: Option<String>,
    pub init_path: Option<String>,
    #[serde(rename = "intelRdt")]
    pub intel_rdt: Option<ContainerCreateIntelRdtOptions>,
    pub ipcns: Option<Namespace>,
    pub label_nested: Option<bool>,
    pub labels: Option<HashMap<String, String>>,
    pub log_configuration: Option<ContainerCreateLogConfigurationOptions>,
    pub manage_password: Option<bool>,
    pub mask: Option<Vec<String>>,
    pub mounts: Option<Vec<VolumeMount>>,
    pub name: Option<String>,
    pub netns: Option<Namespace>,
    pub network_options: Option<HashMap<String, Vec<String>>>,
    #[serde(rename = "Networks")]
    pub networks: Option<HashMap<String, PerNetworkOptions>>,
    pub no_new_privileges: Option<bool>,
    pub oci_runtime: Option<String>,
    pub oom_score_adj: Option<i64>,
    pub overlay_volumes: Option<Vec<OverlayVolume>>,
    pub passwd_entry: Option<String>,
    pub personality: Option<ContainerCreatePersonalityOptions>,
    pub pidns: Option<Namespace>,
    pub pod: Option<String>,
    pub portmappings: Option<Vec<PortMapping>>,
    pub privileged: Option<bool>,
    pub procfs_opts: Option<Vec<String>>,
    pub publish_image_ports: Option<bool>,
    pub r_limits: Option<Vec<ContainerCreateRLimitOptions>>,
    pub raw_image_name: Option<String>,
    pub read_only_filesystem: Option<bool>,
    pub read_write_tmpfs: Option<bool>,
    pub remove: Option<bool>,
    #[serde(rename = "removeImage")]
    pub remove_image: Option<bool>,
    pub resource_limits: Option<LinuxResources>,
    pub restart_policy: Option<String>,
    pub restart_tries: Option<u64>,
    pub rootfs: Option<String>,
    pub rootfs_mapping: Option<String>,
    pub rootfs_overlay: Option<bool>,
    pub rootfs_propagation: Option<String>,
    #[serde(rename = "sdnotifyMode")]
    pub sdnotify_mode: Option<String>,
    pub seccomp_policy: Option<String>,
    pub seccomp_profile_path: Option<String>,
    pub secret_env: Option<HashMap<String, String>>,
    pub secrets: Option<Vec<ContainerCreateSecretOptions>>,
    pub selinux_opts: Option<Vec<String>>,
    pub shm_size: Option<i64>,
    pub shm_size_systemd: Option<i64>,
    #[serde(rename = "startupHealthConfig")]
    pub startup_health_config: Option<ContainerCreateStartupHealthConfigOptions>,
    pub stdin: Option<bool>,
    pub stop_signal: Option<i64>,
    pub stop_timeout: Option<u64>,
    pub storage_opts: Option<HashMap<String, String>>,
    pub sysctl: Option<HashMap<String, String>>,
    pub systemd: Option<String>,
    pub terminal: Option<bool>,
    #[serde(rename = "throttleReadBpsDevice")]
    pub throttle_read_bps_device: Option<HashMap<String, LinuxThrottleDevice>>,
    #[serde(rename = "throttleReadIOPSDevice")]
    pub throttle_read_iops_device: Option<HashMap<String, LinuxThrottleDevice>>,
    #[serde(rename = "throttleWriteBpsDevice")]
    pub throttle_write_bps_device: Option<HashMap<String, LinuxThrottleDevice>>,
    #[serde(rename = "throttleWriteIOPSDevice")]
    pub throttle_write_iops_device: Option<HashMap<String, LinuxThrottleDevice>>,
    pub timeout: Option<u64>,
    pub timezone: Option<String>,
    pub umask: Option<String>,
    pub unified: Option<HashMap<String, String>>,
    pub unmask: Option<Vec<String>>,
    pub unsetenv: Option<Vec<String>>,
    pub unsetenvall: Option<bool>,
    pub use_image_hostname: Option<bool>,
    pub use_image_hosts: Option<bool>,
    pub use_image_resolve_conf: Option<bool>,
    pub user: Option<String>,
    pub userns: Option<Namespace>,
    pub utsns: Option<Namespace>,
    pub volatile: Option<bool>,
    pub volumes: Option<Vec<NamedVolume>>,
    pub volumes_from: Option<Vec<String>>,
    pub weight_device: Option<HashMap<String, LinuxWeightDevice>>,
    pub work_dir: Option<String>,
}

#[derive(Serialize, Default)]
pub struct ContainerCreateArtifactVolumeOptions {
    pub destination: Option<String>,
    pub digest: Option<String>,
    pub name: Option<String>,
    pub source: Option<String>,
    pub title: Option<String>,
}

#[derive(Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ContainerCreateLinuxDeviceOptions {
    pub file_mode: Option<u32>,
    pub gid: Option<u32>,
    pub major: Option<i64>,
    pub minor: Option<i64>,
    pub path: Option<String>,
    pub r#type: Option<String>,
    pub uid: Option<u32>,
}

#[derive(Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ContainerCreateIntelRdtOptions {
    #[serde(rename = "closID")]
    pub clos_id: Option<String>,
    #[serde(rename = "enableCMT")]
    pub enable_cmt: Option<bool>,
    #[serde(rename = "enableMBM")]
    pub enable_mbm: Option<bool>,
    pub l3_cache_schema: Option<String>,
    pub mem_bw_schema: Option<String>,
}

#[derive(Serialize, Default)]
pub struct ContainerCreateLogConfigurationOptions {
    pub driver: Option<String>,
    pub options: Option<HashMap<String, String>>,
    pub path: Option<String>,
    pub size: Option<i64>,
}

#[derive(Serialize, Default)]
pub struct ContainerCreatePersonalityOptions {
    pub domain: Option<String>,
    pub flags: Option<Vec<String>>,
}

#[derive(Serialize, Default)]
pub struct ContainerCreateRLimitOptions {
    pub hard: Option<u64>,
    pub soft: Option<u64>,
    pub r#type: Option<String>,
}

#[derive(Serialize, Default)]
#[serde(rename_all = "PascalCase")]
pub struct ContainerCreateSecretOptions {
    pub key: Option<String>,
    pub secret: Option<String>,
}

#[derive(Serialize, Default)]
#[serde(rename_all = "PascalCase")]
pub struct ContainerCreateStartupHealthConfigOptions {
    pub interval: Option<i64>,
    pub retries: Option<i64>,
    pub start_interval: Option<i64>,
    pub start_period: Option<i64>,
    pub successes: Option<i64>,
    pub test: Option<Vec<String>>,
    pub timeout: Option<i64>,
}

#[derive(Deserialize, Serialize)]
pub struct ContainerCreate {
    pub id: String,
    pub warnings: Vec<String>,
}

impl fmt::Debug for ContainerCreate {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let json = serde_json::to_string_pretty(self).map_err(|_| fmt::Error)?;
        f.write_str(&json)
    }
}