pub trait VecLike<D>:
    AsRef<[<D as SnapshotVecDelegate>::Value]>
    + AsMut<[<D as SnapshotVecDelegate>::Value]>
    + Rollback<UndoLog<D>>where
    D: SnapshotVecDelegate,{
    // Required methods
    fn push(&mut self, item: <D as SnapshotVecDelegate>::Value);
    fn len(&self) -> usize;
    fn reserve(&mut self, size: usize);
}