node/transition_frontier/sync/ledger/
transition_frontier_sync_ledger_actions.rs1use openmina_core::ActionEvent;
2use serde::{Deserialize, Serialize};
3
4use crate::{transition_frontier::sync::TransitionFrontierSyncAction, TransitionFrontierAction};
5
6use super::{
7 snarked::TransitionFrontierSyncLedgerSnarkedAction,
8 staged::TransitionFrontierSyncLedgerStagedAction, TransitionFrontierSyncLedgerState,
9};
10
11pub type TransitionFrontierSyncLedgerActionWithMeta =
12 redux::ActionWithMeta<TransitionFrontierSyncLedgerAction>;
13pub type TransitionFrontierSyncLedgerActionWithMetaRef<'a> =
14 redux::ActionWithMeta<&'a TransitionFrontierSyncLedgerAction>;
15
16#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone, ActionEvent)]
17pub enum TransitionFrontierSyncLedgerAction {
18 Init,
19 Snarked(TransitionFrontierSyncLedgerSnarkedAction),
20 Staged(TransitionFrontierSyncLedgerStagedAction),
21 Success,
22}
23
24impl redux::EnablingCondition<crate::State> for TransitionFrontierSyncLedgerAction {
25 fn is_enabled(&self, state: &crate::State, time: redux::Timestamp) -> bool {
26 match self {
27 TransitionFrontierSyncLedgerAction::Init => state
28 .transition_frontier
29 .sync
30 .ledger()
31 .is_some_and(|s| matches!(s, TransitionFrontierSyncLedgerState::Init { .. })),
32 TransitionFrontierSyncLedgerAction::Snarked(a) => a.is_enabled(state, time),
33 TransitionFrontierSyncLedgerAction::Staged(a) => a.is_enabled(state, time),
34 TransitionFrontierSyncLedgerAction::Success => {
35 state.transition_frontier.sync.is_ledger_sync_complete()
36 }
37 }
38 }
39}
40
41impl From<TransitionFrontierSyncLedgerAction> for crate::Action {
42 fn from(value: TransitionFrontierSyncLedgerAction) -> Self {
43 Self::TransitionFrontier(TransitionFrontierAction::Sync(
44 TransitionFrontierSyncAction::Ledger(value),
45 ))
46 }
47}