use std::collections::HashMap;
use crate::core::row::Row;
use crate::core::version::Version;
pub const YAD_CURRENT_VERSION: Version = Version {
major: 1,
minor: 0,
patch: 0,
beta: 0
};
#[derive(Clone, Eq, PartialEq, Debug)]
pub struct YAD {
pub version: Version,
pub rows: HashMap<String, Row>,
}
impl YAD {
pub fn new() -> Self {
Self {
version: YAD_CURRENT_VERSION,
rows: HashMap::new(),
}
}
pub fn add_row(&mut self, row: Row) {
self.rows.insert(row.name.clone(), row);
}
pub fn get_row(&self, key: &str) -> Option<&Row> {
self.rows.get(key)
}
pub fn get_row_mut(&mut self, key: &str) -> Option<&mut Row> {
self.rows.get_mut(key)
}
pub fn remove_row(&mut self, key: &str) -> Option<Row> {
self.rows.remove(key)
}
}
impl AsRef<YAD> for YAD {
fn as_ref(&self) -> &YAD {
&self
}
}
impl AsMut<YAD> for YAD {
fn as_mut(&mut self) -> &mut YAD {
self
}
}
impl std::fmt::Display for YAD {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "Version: {}\nRows: {{", self.version)?;
for (i, row) in self.rows.values().enumerate() {
writeln!(f, " {}: {{", row.name)?;
for (i, (key_name, key)) in row.keys.iter().enumerate() {
write!(f, " {}: {}", key_name, key.value)?;
if i < row.keys.len() - 1 {
writeln!(f, ",")?;
} else {
writeln!(f)?;
}
}
write!(f, " }}")?;
if i < self.rows.len() - 1 {
writeln!(f, ",")?;
} else {
writeln!(f)?;
}
}
write!(f, "}}")
}
}