use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Resources {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub devices: Vec<DeviceCgroup>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory: Option<MemoryResources>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cpu: Option<CpuResources>,
#[serde(rename = "blockIO", skip_serializing_if = "Option::is_none")]
pub block_io: Option<BlockIoResources>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pids: Option<PidsResources>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub hugepage_limits: Vec<HugepageLimit>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network: Option<NetworkResources>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub rdma: HashMap<String, RdmaResource>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeviceCgroup {
pub allow: bool,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub device_type: Option<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 access: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MemoryResources {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reservation: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub swap: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kernel: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kernel_tcp: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub swappiness: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_oom_killer: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub use_hierarchy: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub check_before_update: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CpuResources {
#[serde(skip_serializing_if = "Option::is_none")]
pub shares: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quota: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub burst: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub period: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub realtime_runtime: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub realtime_period: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cpus: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mems: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idle: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BlockIoResources {
#[serde(skip_serializing_if = "Option::is_none")]
pub weight: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub leaf_weight: Option<u16>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub weight_device: Vec<WeightDevice>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub throttle_read_bps_device: Vec<ThrottleDevice>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub throttle_write_bps_device: Vec<ThrottleDevice>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub throttle_read_iops_device: Vec<ThrottleDevice>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub throttle_write_iops_device: Vec<ThrottleDevice>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WeightDevice {
pub major: i64,
pub minor: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub weight: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub leaf_weight: Option<u16>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ThrottleDevice {
pub major: i64,
pub minor: i64,
pub rate: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PidsResources {
pub limit: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HugepageLimit {
pub page_size: String,
pub limit: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NetworkResources {
#[serde(rename = "classID", skip_serializing_if = "Option::is_none")]
pub class_id: Option<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub priorities: Vec<NetworkPriority>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkPriority {
pub name: String,
pub priority: u32,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RdmaResource {
#[serde(skip_serializing_if = "Option::is_none")]
pub hca_handles: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hca_objects: Option<u32>,
}