woopsa/protocol/
container.rs1use 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}