use std::collections::HashMap; use crate::item::Item; pub struct Storage { keys: HashMap, items: Vec, } impl Storage { pub fn new() -> Self { Storage { keys: HashMap::new(), items: Vec::new(), } } pub fn contains_key(&self, key: &str) -> bool { self.keys.contains_key(key) } pub fn insert(&mut self, key: String, item: Item) { let index = self.items.len(); self.items.push(item); self.keys.insert(key, index); } pub fn get_id(&self, key: &str) -> usize { self.keys[key] } pub fn get_item(&mut self, id: usize) -> &mut Item { &mut self.items[id] } pub fn item(&self, id: usize) -> &Item { &self.items[id] } pub fn item_mut(&mut self, id: usize) -> &mut Item { &mut self.items[id] } pub fn items_mut(&mut self) -> impl Iterator { self.items.iter_mut() } }