use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum ClusterResource {
Qemu(QemuResource),
Lxc(LxcResource),
Storage(StorageResource),
Node(NodeResource),
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct CommonResourceFields {
pub node: String,
pub id: String,
#[serde(default)]
pub name: Option<String>,
pub status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub uptime: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct QemuResource {
#[serde(flatten)]
pub common: CommonResourceFields,
pub vmid: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub maxcpu: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub maxmem: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub disk: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub netin: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub netout: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct LxcResource {
#[serde(flatten)]
pub common: CommonResourceFields,
pub vmid: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub maxcpu: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub maxmem: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub disk: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub swap: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct StorageResource {
#[serde(flatten)]
pub common: CommonResourceFields,
pub storage: String,
#[serde(rename = "plugintype")]
pub storage_type: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub total: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub used: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub avail: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub struct NodeResource {
#[serde(flatten)]
pub common: CommonResourceFields,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cpu: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mem: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub loadavg: Option<[f64; 3]>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kversion: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub power: Option<String>,
}