use crate::error::{InternalError, InvalidStateError};
use crate::state::{Pruner, StateError};
use crate::state::merkle::kv::{error::StateDatabaseError, MerkleRadixTree, MerkleState};
impl Pruner for MerkleState {
fn prune(&self, state_ids: Vec<Self::StateId>) -> Result<Vec<Self::Key>, StateError> {
state_ids
.iter()
.try_fold(Vec::new(), |mut result, state_id| {
result.extend(MerkleRadixTree::prune(&*self.db, state_id).map_err(
|err| match err {
StateDatabaseError::NotFound(msg) => {
StateError::from(InvalidStateError::with_message(msg))
}
_ => StateError::from(InternalError::from_source(Box::new(err))),
},
)?);
Ok(result)
})
}
}