use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmSummary {
pub vir_name: String,
pub vir_display_name: String,
#[serde(default, rename = "virID")]
pub vir_id: i64,
#[serde(default)]
pub storage_name: String,
#[serde(default)]
pub system_type: String,
#[serde(default)]
pub system_version: String,
#[serde(default)]
pub graphic: String,
#[serde(default)]
pub guest_cpu_percent: i64,
#[serde(default)]
pub guest_total_memory: i64,
#[serde(default)]
pub guest_used_memory: i64,
#[serde(default)]
pub host_cpu_percent: i64,
#[serde(default)]
pub host_used_memory: i64,
#[serde(default)]
pub host_total_memory: i64,
#[serde(default)]
pub upload: i64,
#[serde(default)]
pub download: i64,
#[serde(default)]
pub status: String,
#[serde(default)]
pub process_status: String,
#[serde(default)]
pub progress: i64,
#[serde(default)]
pub create_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmDetail {
pub virtual_machine_name: String,
pub virtual_machine_display_name: String,
pub system_type: String,
pub system_version: String,
pub core: VmResource,
pub memory: VmResource,
pub images: Vec<VmImage>,
pub dists: Vec<VmDisk>,
pub networks: Vec<VmNetwork>,
pub device: VmDevice,
pub other_config: VmOtherConfig,
pub storage_name: String,
#[serde(default, rename = "storageUUID")]
pub storage_uuid: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VmResource {
pub value: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VmImage {
pub path: String,
pub dev: String,
pub order: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VmDisk {
pub bus: String,
pub size: i64,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub dev: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub path: String,
pub order: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmNetwork {
pub name: String,
pub mac_address: String,
#[serde(rename = "type")]
pub nic_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmDevice {
pub usb_controller: i64,
pub usb_devices: Vec<serde_json::Value>,
pub graphics_card: String,
pub boot_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmOtherConfig {
pub auto_matic_start_up: bool,
pub keyboard_language: String,
pub share_directory: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Overview {
#[serde(default)]
pub host_stats: HostStats,
#[serde(default)]
pub vm_list: Vec<VmSummary>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HostStats {
#[serde(default)]
pub cpu_util: f64,
#[serde(default)]
pub host_total_mem: i64,
#[serde(default)]
pub other_used_mem: i64,
#[serde(default)]
pub total_used_mem: i64,
#[serde(default)]
pub vm_used_mem: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StorageUsage {
#[serde(default)]
pub name: String,
#[serde(default)]
pub label: String,
#[serde(default)]
pub filesystem: String,
#[serde(default)]
pub total_capacity: i64,
#[serde(default)]
pub available_capacity: i64,
#[serde(default)]
pub used_capacity: i64,
#[serde(default)]
pub used_percent: f64,
#[serde(default)]
pub vir_count: i64,
#[serde(default)]
pub vm_usages: Vec<VmUsage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmUsage {
#[serde(default)]
pub vir_display_name: String,
#[serde(default)]
pub vir_name: String,
#[serde(default)]
pub used_capacity: i64,
#[serde(default)]
pub used_percent: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Snapshot {
pub name: String,
#[serde(default)]
pub display_name: String,
#[serde(default)]
pub create_time: String,
#[serde(default)]
pub description: String,
#[serde(default)]
pub id: i64,
#[serde(default)]
pub vir_name: String,
#[serde(default)]
pub screenshot: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NetworkSummary {
pub network_name: String,
#[serde(rename = "networkUUID")]
pub network_uuid: String,
pub network_label: String,
pub network_valid: bool,
pub network_type: String,
pub network_mode: String,
pub interface_name: String,
pub virtual_display_names: Vec<String>,
pub system_network: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(clippy::struct_excessive_bools)]
pub struct NetworkDetail {
#[serde(rename = "networkUUID")]
pub network_uuid: String,
pub network_name: String,
pub network_type: String,
pub network_mode: String,
pub mapping_network: String,
pub enable_ipv4: bool,
pub allocate_ipv4: bool,
pub ipv4_subnet: String,
pub ipv4_gateway: String,
#[serde(rename = "ipv4DHCPStartIp")]
pub ipv4_dhcp_start_ip: String,
#[serde(rename = "ipv4DHCPEndIp")]
pub ipv4_dhcp_end_ip: String,
pub enable_ipv6: bool,
pub ipv6_subnet: String,
pub ipv6_gateway: String,
#[serde(rename = "ipv6DHCPStartIp")]
pub ipv6_dhcp_start_ip: String,
#[serde(rename = "ipv6DHCPEndIp")]
pub ipv6_dhcp_end_ip: String,
pub allocate_ipv6: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StorageInfo {
pub name: String,
pub label: String,
pub health: i64,
pub status: i64,
#[serde(rename = "totalCapacity")]
pub total_capacity: i64,
#[serde(rename = "availableCapacity")]
pub available_capacity: i64,
pub uuid: String,
pub path: String,
pub filesystem: String,
#[serde(default, rename = "virCount")]
pub vir_count: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ImageInfo {
pub id: i64,
pub file_name: String,
pub image_name: String,
pub file_size: i64,
pub progress: i64,
pub state: String,
pub image_type: String,
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsbDevice {
#[serde(rename = "vendorID")]
pub vendor_id: String,
pub vendor_name: String,
#[serde(rename = "productID")]
pub product_id: String,
pub product_name: String,
#[serde(rename = "busID")]
pub bus_id: i64,
#[serde(rename = "deviceID")]
pub device_id: i64,
pub used_by: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HostInfo {
pub cores: i64,
pub memory: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VncLink {
#[serde(default)]
pub link: String,
#[serde(default, rename = "type")]
pub link_type: i64,
#[serde(default)]
pub password: String,
#[serde(default)]
pub api_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LogEntry {
#[serde(default)]
pub id: i64,
#[serde(default)]
pub operator: String,
#[serde(default)]
pub content: String,
#[serde(default)]
pub create_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LogPage {
#[serde(default)]
pub list: Vec<LogEntry>,
#[serde(default)]
pub total: i64,
}