use serde::{Deserialize, Deserializer, Serialize};
fn null_vec_as_empty<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>,
{
Option::<Vec<T>>::deserialize(deserializer).map(Option::unwrap_or_default)
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DockerOverview {
pub container_count: i64,
pub run_container_count: i64,
pub image_count: i64,
pub memory_used: i64,
pub total_memory: i64,
pub container_memory: i64,
pub cpu_used: i64,
pub container_cpu_used: i64,
pub status: bool,
#[serde(default)]
pub project_counr: i64,
#[serde(default)]
pub run_project_counr: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Container {
#[serde(default)]
pub name: String,
#[serde(default)]
pub container_id: String,
#[serde(default)]
pub image_id: String,
#[serde(default)]
pub image_name: String,
#[serde(default)]
pub version: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub project_name: String,
#[serde(default)]
pub create_at: i64,
#[serde(default)]
pub application: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(clippy::struct_excessive_bools)]
pub struct ContainerDetail {
#[serde(default)]
pub image_name: String,
#[serde(default)]
pub image_id: String,
#[serde(default)]
pub image_version: String,
#[serde(default)]
pub tag: String,
#[serde(default)]
pub container_name: String,
#[serde(default)]
pub cpu_limit: i64,
#[serde(default)]
pub mem_limit: i64,
#[serde(default)]
pub no_restrictions: bool,
#[serde(default)]
pub network_mode: String,
#[serde(default)]
pub hardware_acceleration: bool,
#[serde(default)]
pub privileged_mode: bool,
#[serde(default)]
pub abnormal_reset: bool,
#[serde(default, deserialize_with = "null_vec_as_empty")]
pub gpu_ids: Vec<String>,
#[serde(default, deserialize_with = "null_vec_as_empty")]
pub subnet_settings: Vec<SubnetSetting>,
#[serde(default)]
pub run_container: bool,
#[serde(default, deserialize_with = "null_vec_as_empty")]
pub port_mapping: Vec<PortMapping>,
pub volumes: Option<Vec<serde_json::Value>>,
#[serde(default, deserialize_with = "null_vec_as_empty")]
pub environment_variables: Vec<EnvVar>,
#[serde(default, deserialize_with = "null_vec_as_empty")]
pub container_run_command: Vec<String>,
#[serde(default)]
pub perm_and_func: Option<Vec<String>>,
#[serde(default)]
pub project_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubnetSetting {
pub network_name: String,
pub subnet: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PortMapping {
pub nas_port: i64,
pub container_port: i64,
pub port_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnvVar {
#[serde(default)]
pub variable: String,
#[serde(default)]
pub price: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContainerPage {
#[serde(default)]
pub original_total: i64,
#[serde(default)]
pub result: Option<Vec<Container>>,
#[serde(default)]
pub total: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DockerImage {
#[serde(default)]
pub image_id: String,
#[serde(default)]
pub image_ref: String,
#[serde(default)]
pub image_name: String,
#[serde(default)]
pub image_size: i64,
#[serde(default)]
pub image_version: String,
#[serde(default)]
pub status: i64,
#[serde(default)]
pub create: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ImagePage {
#[serde(default)]
pub original_total: i64,
#[serde(default)]
pub result: Option<Vec<DockerImage>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ComposeProject {
#[serde(default)]
pub name: String,
#[serde(default)]
pub path: String,
#[serde(default)]
pub status: i64,
#[serde(default)]
pub container_sum: i64,
#[serde(default)]
pub run_container_sum: i64,
#[serde(default)]
pub config_file_missing: bool,
#[serde(default)]
pub create_time: String,
#[serde(default)]
pub container_list: Option<Vec<ComposeProjectContainer>>,
#[serde(default)]
pub application: String,
#[serde(default)]
pub container_num: i64,
#[serde(default)]
pub progress: i64,
#[serde(default)]
pub img_has_update: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ComposeProjectContainer {
#[serde(default)]
pub container_name: String,
#[serde(default)]
pub container_id: String,
#[serde(default)]
pub image_name: String,
#[serde(default)]
pub version: String,
#[serde(default)]
pub restart_policy: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ComposeProjectPage {
#[serde(default)]
pub original_total: i64,
#[serde(default)]
pub list: Option<Vec<ComposeProject>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Mirror {
pub id: i64,
pub alias: String,
pub address: String,
#[serde(default)]
pub is_dockerhub: bool,
#[serde(default)]
pub status: bool,
}