use std::collections::HashMap;
use super::component_model::ComponentModel;
use crate::error::A2uiError;
pub struct SurfaceComponentsModel {
components: HashMap<String, ComponentModel>,
}
impl Default for SurfaceComponentsModel {
fn default() -> Self {
Self::new()
}
}
impl SurfaceComponentsModel {
pub fn new() -> Self {
Self {
components: HashMap::new(),
}
}
pub fn get(&self, id: &str) -> Option<&ComponentModel> {
self.components.get(id)
}
pub fn upsert(&mut self, component: ComponentModel) {
self.components.insert(component.id.clone(), component);
}
pub fn remove(&mut self, id: &str) {
self.components.remove(id);
}
pub fn contains(&self, id: &str) -> bool {
self.components.contains_key(id)
}
pub fn all(&self) -> &HashMap<String, ComponentModel> {
&self.components
}
pub fn add_from_json(&mut self, raw_components: &[serde_json::Value]) -> Vec<Result<(), A2uiError>> {
raw_components
.iter()
.map(|raw| {
let model = ComponentModel::from_json(raw)?;
self.upsert(model);
Ok(())
})
.collect()
}
#[allow(dead_code)]
pub fn len(&self) -> usize {
self.components.len()
}
#[allow(dead_code)]
pub fn is_empty(&self) -> bool {
self.components.is_empty()
}
}