use serde::{Deserialize, Serialize};
use crate::{chart_hints::ChartHints, unit::MeasurementKind};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubsetMeasurementInfo {
pub etl_unit_name: String, pub kind: MeasurementKind,
pub chart_hints: ChartHints,
#[serde(default)]
pub null_info: Option<NullInfo>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NullInfo {
pub null_count: usize,
pub total_count: usize,
pub null_value_applied: Option<serde_json::Value>,
pub null_value_expansion_applied: Option<serde_json::Value>,
}
impl NullInfo {
pub fn new(null_count: usize, total_count: usize) -> Self {
Self {
null_count,
total_count,
null_value_applied: None,
null_value_expansion_applied: None,
}
}
pub fn null_percentage(&self) -> f64 {
if self.total_count == 0 {
0.0
} else {
(self.null_count as f64 / self.total_count as f64) * 100.0
}
}
pub fn with_null_value(mut self, value: serde_json::Value) -> Self {
self.null_value_applied = Some(value);
self
}
pub fn with_null_value_expansion(mut self, value: serde_json::Value) -> Self {
self.null_value_expansion_applied = Some(value);
self
}
}