1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
pub trait Store {
    type Item;

    fn get(&self, idx: usize) -> &Self::Item;
}

pub trait StoreMut: Store {
    fn clear(&mut self);

    fn insert(&mut self, idx: usize, value: Self::Item);
    fn replace(&mut self, idx: usize, value: Self::Item) -> Self::Item;
    fn remove(&mut self, idx: usize) -> Self::Item;

    fn get_mut(&mut self, idx: usize) -> &mut Self::Item;
}