a2ui_base/model/
surface_group_model.rs1use std::collections::HashMap;
4
5use super::surface_model::SurfaceModel;
6use crate::error::A2uiError;
7
8pub struct SurfaceGroupModel {
10 surfaces: HashMap<String, SurfaceModel>,
11}
12
13impl Default for SurfaceGroupModel {
14 fn default() -> Self {
15 Self::new()
16 }
17}
18
19impl SurfaceGroupModel {
20 pub fn new() -> Self {
21 Self {
22 surfaces: HashMap::new(),
23 }
24 }
25
26 pub fn add_surface(&mut self, surface: SurfaceModel) -> Result<(), A2uiError> {
28 if self.surfaces.contains_key(&surface.id) {
29 return Err(A2uiError::SurfaceExists(surface.id.clone()));
30 }
31 self.surfaces.insert(surface.id.clone(), surface);
32 Ok(())
33 }
34
35 pub fn get_surface(&self, id: &str) -> Option<&SurfaceModel> {
37 self.surfaces.get(id)
38 }
39
40 pub fn get_surface_mut(&mut self, id: &str) -> Option<&mut SurfaceModel> {
42 self.surfaces.get_mut(id)
43 }
44
45 pub fn delete_surface(&mut self, id: &str) -> Result<(), A2uiError> {
47 self.surfaces
48 .remove(id)
49 .ok_or_else(|| A2uiError::SurfaceNotFound(id.to_string()))?;
50 Ok(())
51 }
52
53 pub fn surfaces(&self) -> impl Iterator<Item = &SurfaceModel> {
55 self.surfaces.values()
56 }
57
58 pub fn surfaces_mut(&mut self) -> impl Iterator<Item = &mut SurfaceModel> {
60 self.surfaces.values_mut()
61 }
62
63 #[allow(dead_code)]
65 pub fn len(&self) -> usize {
66 self.surfaces.len()
67 }
68}