woopsa 0.1.1

A pure Rust library for Woopsa.
Documentation
use serde::{Deserialize, Serialize};

use crate::protocol::element::WoopsaElement;
use crate::protocol::object::WoopsaObject;
use crate::protocol::constant::*;

use std::collections::HashMap;
use std::fmt;

trait Container {
    fn type_of(&self) -> &'static str;
    fn clear(&mut self); 
}

#[derive(Serialize, Deserialize)]
pub struct WoopsaContainer {
    pub element: WoopsaElement,
    pub items: HashMap<String, WoopsaObject>
}

impl WoopsaContainer {
    pub fn name(&self) -> String {
        return self.element.name.clone();
    }

    pub fn insert_item(&mut self, item: WoopsaObject) {
        self.items.insert(item.name().clone(), item);
    }

    pub fn remove_item(&mut self, item: WoopsaObject) {
        self.items.remove(&(item.container.element.name));
    }

    pub fn clear(&mut self) {
        self.items.clear();
    }
}

impl Container for WoopsaContainer {
    fn type_of(&self) -> &'static str {
        "WoopsaContainer"
    }

    fn clear(&mut self) {
        self.clear();
    }
}

impl fmt::Display for WoopsaContainer {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "(container {} with items count {})", 
        self.name(),
        self.items.len())
    }
}