pub trait Value: PartialEq<Self> {
type Key;
type Item;
#[allow(clippy::type_complexity)]
fn items<'a>(&'a self) -> Option<Box<dyn Iterator<Item = (Self::Key, &'a Self::Item)> + 'a>>;
}
pub trait Delegate<'a, K, V> {
fn push(&mut self, _k: &K) {}
fn pop(&mut self) {}
fn removed<'b>(&mut self, _k: &'b K, _v: &'a V) {}
fn added<'b>(&mut self, _k: &'b K, _v: &'a V) {}
fn unchanged(&mut self, _v: &'a V) {}
fn modified(&mut self, _old: &'a V, _new: &'a V) {}
}
pub trait Mutable {
type Key;
type Item;
fn set(&mut self, keys: &[Self::Key], new: &Self::Item);
fn remove(&mut self, keys: &[Self::Key]);
}