use base::{HasData, Iter, IterMut};
use refs::{Ref, RefMut};
pub trait HasMapData: HasData {
type Key;
type Value;
}
pub trait MapIter<'a>: HasMapData + Iter<'a> {
type KeyRef: Ref<'a, Self::Key>;
type ValueRef: Ref<'a, Self::Value>;
type IterKeysRef: Iterator<Item = Self::KeyRef>;
type IterValuesRef: Iterator<Item = Self::ValueRef>;
fn keys(&'a self) -> Self::IterKeysRef;
fn values(&'a self) -> Self::IterValuesRef;
}
pub trait MapIterMut<'a>: MapIter<'a> + IterMut<'a> {
type ValueMut: RefMut<'a, Self::Value>;
type IterValuesMut: Iterator<Item = Self::ValueMut>;
fn values_mut(&'a mut self) -> Self::IterValuesMut;
}