openmina_node_common/service/
replay.rs

1use std::collections::VecDeque;
2
3use node::ActionKind;
4use redux::ActionMeta;
5
6pub struct ReplayerState {
7    pub initial_monotonic: redux::Instant,
8    pub initial_time: redux::Timestamp,
9    pub expected_actions: VecDeque<(ActionKind, ActionMeta)>,
10    pub replay_dynamic_effects_lib: String,
11}
12
13impl ReplayerState {
14    pub fn next_monotonic_time(&self) -> redux::Instant {
15        self.expected_actions
16            .front()
17            .map(|(_, meta)| meta.time())
18            .map(|expected_time| {
19                let time_passed = expected_time.checked_sub(self.initial_time).unwrap();
20                self.initial_monotonic + time_passed
21            })
22            .unwrap_or(self.initial_monotonic)
23    }
24}