use serde::ser::SerializeStruct;
use serde::{Deserialize, Serialize, Serializer};
use crate::results::MinimalFallback;
use crate::results::{BooleanStats, DateStats, NumericStats};
#[derive(Debug, Clone, Deserialize, Default)]
pub struct CsvMetadata {
pub row_count: usize,
pub column_count: usize,
pub column_names: Option<Vec<String>>,
pub encoding: Option<String>,
pub column_types: Option<Vec<String>>,
pub delimiter: Option<String>,
pub quote_character: Option<String>,
pub escape_character: Option<String>,
pub has_header: Option<bool>,
pub null_percentages: Option<Vec<f64>>,
pub unique_counts: Option<Vec<usize>>,
pub numeric_stats: Option<Vec<Option<NumericStats>>>,
pub date_stats: Option<Vec<Option<DateStats>>>,
pub boolean_stats: Option<Vec<Option<BooleanStats>>>,
}
impl Serialize for CsvMetadata {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("CsvMetadata", 14)?;
state.serialize_field("row_count", &self.row_count)?;
state.serialize_field("column_count", &self.column_count)?;
crate::serialize_optional!(state, self.column_names, "column_names");
crate::serialize_optional!(state, self.encoding, "encoding");
crate::serialize_optional!(state, self.column_types, "column_types");
crate::serialize_optional!(state, self.delimiter, "delimiter");
crate::serialize_optional!(state, self.quote_character, "quote_character");
crate::serialize_optional!(state, self.escape_character, "escape_character");
crate::serialize_optional!(state, self.has_header, "has_header");
crate::serialize_optional!(state, self.null_percentages, "null_percentages");
crate::serialize_optional!(state, self.unique_counts, "unique_counts");
crate::serialize_optional!(state, self.numeric_stats, "numeric_stats");
crate::serialize_optional!(state, self.date_stats, "date_stats");
crate::serialize_optional!(state, self.boolean_stats, "boolean_stats");
state.end()
}
}
crate::impl_minimal_fallback!(CsvMetadata, _);