use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataTableRow {
pub row_name: String,
pub fields: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataTable {
pub key: String,
pub name: String,
pub row_struct: String,
pub rows: Vec<DataTableRow>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataTableManifest {
pub tables: HashMap<String, DataTable>,
}
impl DataTableManifest {
pub fn get(&self, key: &str) -> Option<&DataTable> {
let lower = key.to_lowercase();
self.tables.get(&lower)
}
pub fn keys(&self) -> Vec<&str> {
let mut keys: Vec<&str> = self.tables.keys().map(|s| s.as_str()).collect();
keys.sort();
keys
}
pub fn len(&self) -> usize {
self.tables.len()
}
pub fn is_empty(&self) -> bool {
self.tables.is_empty()
}
pub fn total_rows(&self) -> usize {
self.tables.values().map(|t| t.rows.len()).sum()
}
}