use crate::batch_avl_prover::*;
use crate::batch_node::*;
use crate::operation::*;
use alloc::boxed::Box;
use alloc::vec::Vec;
use anyhow::Result;
use core::iter::Iterator;
pub trait VersionedAVLStorage {
fn update(
&mut self,
prover: &mut BatchAVLProver,
additional_data: Vec<(ADKey, ADValue)>,
) -> Result<()>;
fn rollback(&mut self, version: &ADDigest) -> Result<(NodeId, usize)>;
fn version(&self) -> Option<ADDigest>;
fn is_empty(&self) -> bool {
self.version().is_none()
}
fn non_empty(&self) -> bool {
!self.is_empty()
}
fn rollback_versions<'a>(&'a self) -> Box<dyn Iterator<Item = ADDigest> + 'a>;
}