use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ElementType {
Objects,
Arrays,
Strings,
Numbers,
Booleans,
Nulls,
Mixed,
Empty,
}
impl fmt::Display for ElementType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ElementType::Objects => write!(f, "objects"),
ElementType::Arrays => write!(f, "arrays"),
ElementType::Strings => write!(f, "strings"),
ElementType::Numbers => write!(f, "numbers"),
ElementType::Booleans => write!(f, "booleans"),
ElementType::Nulls => write!(f, "nulls"),
ElementType::Mixed => write!(f, "mixed"),
ElementType::Empty => write!(f, ""),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ResultStats {
Array {
count: usize,
element_type: ElementType,
},
Object,
String,
Number,
Boolean,
Null,
Stream { count: usize },
}
impl fmt::Display for ResultStats {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ResultStats::Array {
count,
element_type,
} => match element_type {
ElementType::Empty => write!(f, "Array [0]"),
_ => write!(f, "Array [{} {}]", count, element_type),
},
ResultStats::Object => write!(f, "Object"),
ResultStats::String => write!(f, "String"),
ResultStats::Number => write!(f, "Number"),
ResultStats::Boolean => write!(f, "Boolean"),
ResultStats::Null => write!(f, "null"),
ResultStats::Stream { count } => write!(f, "Stream [{}]", count),
}
}
}
#[cfg(test)]
#[path = "types_tests.rs"]
mod types_tests;