use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct QuerySummary {
fields: HashMap<String, String>,
}
impl QuerySummary {
pub fn get(&self, key: &str) -> Option<&str> {
self.fields.get(key).map(String::as_str)
}
pub fn read_rows(&self) -> Option<u64> {
self.get_u64("read_rows")
}
pub fn read_bytes(&self) -> Option<u64> {
self.get_u64("read_bytes")
}
pub fn written_rows(&self) -> Option<u64> {
self.get_u64("written_rows")
}
pub fn written_bytes(&self) -> Option<u64> {
self.get_u64("written_bytes")
}
pub fn total_rows_to_read(&self) -> Option<u64> {
self.get_u64("total_rows_to_read")
}
pub fn result_rows(&self) -> Option<u64> {
self.get_u64("result_rows")
}
pub fn result_bytes(&self) -> Option<u64> {
self.get_u64("result_bytes")
}
pub fn elapsed_ns(&self) -> Option<u64> {
self.get_u64("elapsed_ns")
}
pub fn memory_usage(&self) -> Option<u64> {
self.get_u64("memory_usage")
}
fn get_u64(&self, key: &str) -> Option<u64> {
self.fields.get(key)?.parse().ok()
}
pub(crate) fn from_header(raw: &str) -> Option<Self> {
let fields: HashMap<String, String> = serde_json::from_str(raw).ok()?;
Some(Self { fields })
}
}