Skip to main content

sim_lib_journal/
replay.rs

1use crate::{JournalEntry, JournalError, StoredState, verify::verify_state};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub struct Replay {
5    entries: Vec<JournalEntry>,
6    cursor: usize,
7}
8
9impl Iterator for Replay {
10    type Item = JournalEntry;
11    fn next(&mut self) -> Option<Self::Item> {
12        let item = self.entries.get(self.cursor).cloned();
13        self.cursor += usize::from(item.is_some());
14        item
15    }
16}
17
18pub fn replay(state: StoredState) -> Result<Replay, JournalError> {
19    let verified = verify_state(&state)?;
20    Ok(Replay {
21        entries: verified.entries,
22        cursor: 0,
23    })
24}