message: Add {HashMap, HashSet}::{len, is_empty, clear}
diff: @@ -15,13 +15,30 @@ impl HashMap {
  }
  }
  + #[inline]
  fn insert(&mut self, key: Key, value: Value) -> Option<Value> {
  self.map.insert(key, value)
  }
  + #[inline]
  fn get(&self, key: Key) -> Option<Value> {
  self.map.get(&key).cloned()
  }
  +
  + #[inline]
  + fn is_empty(&self) -> bool {
  + self.map.is_empty()
  + }
  +
  + #[inline]
  + fn len(&self) -> usize {
  + self.map.len()
  + }
  +
  + #[inline]
  + fn clear(&mut self) {
  + self.map.clear()
  + }
  }
  #[derive(Any)]
  @@ -37,13 +54,30 @@ impl HashSet {
  }
  }
  + #[inline]
  fn insert(&mut self, key: Key) -> bool {
  self.set.insert(key)
  }
  + #[inline]
  fn contains(&self, key: Key) -> bool {
  self.set.contains(&key)
  }
  +
  + #[inline]
  + fn is_empty(&self) -> bool {
  + self.set.is_empty()
  + }
  +
  + #[inline]
  + fn len(&self) -> usize {
  + self.set.len()
  + }
  +
  + #[inline]
  + fn clear(&mut self) {
  + self.set.clear()
  + }
  }
  /// The `std::collections` module.
  @@ -52,13 +86,19 @@ pub fn module() -> Result<Module, ContextError> {
  module.ty::<HashMap>()?;
  module.function(&["HashMap", "new"], HashMap::new)?;
  module.inst_fn("insert", HashMap::insert)?;
  - module.inst_fn(crate::Protocol::INDEX_SET, HashMap::insert)?;
  module.inst_fn("get", HashMap::get)?;
  + module.inst_fn("is_empty", HashMap::is_empty)?;
  + module.inst_fn("len", HashMap::len)?;
  + module.inst_fn("clear", HashMap::clear)?;
  + module.inst_fn(crate::Protocol::INDEX_SET, HashMap::insert)?;
  module.inst_fn(crate::Protocol::INDEX_GET, HashMap::get)?;
  module.ty::<HashSet>()?;
  module.function(&["HashSet", "new"], HashSet::new)?;
  module.inst_fn("insert", HashSet::insert)?;
  module.inst_fn("contains", HashSet::contains)?;
  + module.inst_fn("is_empty", HashSet::is_empty)?;
  + module.inst_fn("len", HashSet::len)?;
  + module.inst_fn("clear", HashSet::clear)?;
  Ok(module)
  }
  