use serde::{Deserialize, Deserializer, Serialize, Serializer};
use std::fmt::{Display, Formatter};
fn deserialize_null_counts<'de, D>(deserializer: D) -> Result<Vec<Option<i64>>, D::Error>
where
D: Deserializer<'de>,
{
let opt: Option<Vec<Option<i64>>> = Option::deserialize(deserializer)?;
Ok(opt.unwrap_or_default())
}
fn serialize_null_counts<S>(value: &[Option<i64>], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let wrapped: Option<&[Option<i64>]> = Some(value);
wrapped.serialize(serializer)
}
#[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)]
pub struct BinaryTableStats {
#[serde(rename = "_MIN_VALUES", with = "serde_bytes")]
min_values: Vec<u8>,
#[serde(rename = "_MAX_VALUES", with = "serde_bytes")]
max_values: Vec<u8>,
#[serde(
rename = "_NULL_COUNTS",
deserialize_with = "deserialize_null_counts",
serialize_with = "serialize_null_counts"
)]
null_counts: Vec<Option<i64>>,
}
impl BinaryTableStats {
#[inline]
pub fn min_values(&self) -> &[u8] {
&self.min_values
}
#[inline]
pub fn max_values(&self) -> &[u8] {
&self.max_values
}
#[inline]
pub fn null_counts(&self) -> &Vec<Option<i64>> {
&self.null_counts
}
pub fn new(
min_values: Vec<u8>,
max_values: Vec<u8>,
null_counts: Vec<Option<i64>>,
) -> BinaryTableStats {
Self {
min_values,
max_values,
null_counts,
}
}
}
impl Display for BinaryTableStats {
fn fmt(&self, _: &mut Formatter<'_>) -> std::fmt::Result {
todo!()
}
}