use crate::model::explain_query_step::ExplainQueryStep;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExplainQueryStage {
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_parallel_inputs: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compute_ms_avg: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compute_ms_max: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compute_ratio_avg: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compute_ratio_max: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_ms: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_stages: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parallel_inputs: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_ms_avg: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_ms_max: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_ratio_avg: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_ratio_max: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub records_read: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub records_written: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shuffle_output_bytes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shuffle_output_bytes_spilled: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub slot_ms: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_ms: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub steps: Option<Vec<ExplainQueryStep>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_ms_avg: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_ms_max: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_ratio_avg: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wait_ratio_max: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_ms_avg: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_ms_max: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_ratio_avg: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_ratio_max: Option<f64>,
}