use crate::error::{InternalError, InvalidStateError};
use crate::state::{Committer, StateChange, StateError};
use crate::state::merkle::kv::{error::StateDatabaseError, MerkleRadixTree, MerkleState};
impl Committer for MerkleState {
type StateChange = StateChange;
fn commit(
&self,
state_id: &Self::StateId,
state_changes: &[Self::StateChange],
) -> Result<Self::StateId, StateError> {
let merkle_tree =
MerkleRadixTree::new(self.db.clone(), Some(state_id)).map_err(|err| match err {
StateDatabaseError::NotFound(msg) => {
StateError::from(InvalidStateError::with_message(msg))
}
_ => StateError::from(InternalError::from_source(Box::new(err))),
})?;
merkle_tree
.update(state_changes, false)
.map_err(|err| StateError::from(InternalError::from_source(Box::new(err))))
}
}