woopsa/protocol/
container.rs

1use serde::{Deserialize, Serialize};
2
3use crate::protocol::element::WoopsaElement;
4use crate::protocol::object::WoopsaObject;
5use crate::protocol::constant::*;
6
7use std::collections::HashMap;
8use std::fmt;
9
10trait Container {
11    fn type_of(&self) -> &'static str;
12    fn clear(&mut self); 
13}
14
15#[derive(Serialize, Deserialize)]
16pub struct WoopsaContainer {
17    pub element: WoopsaElement,
18    pub items: HashMap<String, WoopsaObject>
19}
20
21impl WoopsaContainer {
22    pub fn name(&self) -> String {
23        return self.element.name.clone();
24    }
25
26    pub fn insert_item(&mut self, item: WoopsaObject) {
27        self.items.insert(item.name().clone(), item);
28    }
29
30    pub fn remove_item(&mut self, item: WoopsaObject) {
31        self.items.remove(&(item.container.element.name));
32    }
33
34    pub fn clear(&mut self) {
35        self.items.clear();
36    }
37}
38
39impl Container for WoopsaContainer {
40    fn type_of(&self) -> &'static str {
41        "WoopsaContainer"
42    }
43
44    fn clear(&mut self) {
45        self.clear();
46    }
47}
48
49impl fmt::Display for WoopsaContainer {
50    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51        write!(f, "(container {} with items count {})", 
52        self.name(),
53        self.items.len())
54    }
55}