use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::results::MinimalFallback;
use crate::results::{BooleanStats, DateStats, NumericStats};
use super::array::ArrayLayoutSummary;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MatStructWalkSummary {
pub n_field_layers: usize,
pub field_layers: Option<Vec<Vec<String>>>,
pub leaf_dtypes: String,
pub n_nan: u64,
pub n_inf: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MatGlobalSummary {
pub t: String,
pub count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub uniq: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub num: Option<NumericStats>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<DateStats>,
#[serde(rename = "bool", skip_serializing_if = "Option::is_none")]
pub bool_stats: Option<BooleanStats>,
#[serde(skip_serializing_if = "Option::is_none")]
pub n_nan: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub n_inf: Option<u64>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MatArrayEntrySummary {
pub name: String,
#[serde(flatten)]
pub layout: ArrayLayoutSummary,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub struct_subtree: Option<MatStructWalkSummary>,
#[serde(skip_serializing_if = "Option::is_none")]
pub global: Option<MatGlobalSummary>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entry_parse_error: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MatMetadata {
pub byte_count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub mat_format: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub variable_count: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub variables_scanned: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_parse_error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entries: Option<Vec<MatArrayEntrySummary>>,
}
impl MinimalFallback for MatMetadata {
fn minimal_fallback(file_size_bytes: usize) -> Self {
Self {
byte_count: file_size_bytes,
..Self::default()
}
}
}