use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use super::{IdMapping, Resources, Seccomp, TimeOffsets};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Linux {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub devices: Vec<Device>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub uid_mappings: Vec<IdMapping>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub gid_mappings: Vec<IdMapping>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub sysctl: HashMap<String, String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cgroups_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<Resources>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rootfs_propagation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub seccomp: Option<Seccomp>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub namespaces: Vec<Namespace>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub masked_paths: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub readonly_paths: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mount_label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_offsets: Option<TimeOffsets>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Device {
#[serde(rename = "type")]
pub device_type: String,
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub major: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub minor: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_mode: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uid: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gid: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Namespace {
#[serde(rename = "type")]
pub ns_type: NamespaceType,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum NamespaceType {
Pid,
Network,
Mount,
Ipc,
Uts,
User,
Cgroup,
Time,
}