snark/
snark_reducer.rs

1use openmina_core::{Substate, SubstateAccess};
2use redux::EnablingCondition;
3
4use crate::{
5    block_verify::{SnarkBlockVerifyAction, SnarkBlockVerifyState},
6    block_verify_effectful::SnarkBlockVerifyEffectfulAction,
7    user_command_verify::{SnarkUserCommandVerifyAction, SnarkUserCommandVerifyState},
8    user_command_verify_effectful::SnarkUserCommandVerifyEffectfulAction,
9    work_verify::{SnarkWorkVerifyAction, SnarkWorkVerifyState},
10    work_verify_effectful::SnarkWorkVerifyEffectfulAction,
11};
12
13use super::{SnarkAction, SnarkActionWithMetaRef, SnarkState};
14
15impl SnarkState {
16    pub fn reducer<State, Action>(
17        state: Substate<Action, State, Self>,
18        action: SnarkActionWithMetaRef<'_>,
19    ) where
20        State: SubstateAccess<Self>
21            + SubstateAccess<SnarkWorkVerifyState>
22            + SubstateAccess<SnarkUserCommandVerifyState>
23            + SubstateAccess<SnarkBlockVerifyState>,
24        Action: From<SnarkBlockVerifyAction>
25            + From<SnarkBlockVerifyEffectfulAction>
26            + From<SnarkWorkVerifyAction>
27            + From<SnarkWorkVerifyEffectfulAction>
28            + From<SnarkUserCommandVerifyAction>
29            + From<SnarkUserCommandVerifyEffectfulAction>
30            + From<redux::AnyAction>
31            + EnablingCondition<State>,
32    {
33        let (action, meta) = action.split();
34        match action {
35            SnarkAction::BlockVerify(a) => crate::block_verify::reducer(
36                Substate::from_compatible_substate(state),
37                meta.with_action(a),
38            ),
39            SnarkAction::BlockVerifyEffect(_) => {}
40            SnarkAction::WorkVerify(a) => crate::work_verify::reducer(
41                Substate::from_compatible_substate(state),
42                meta.with_action(a),
43            ),
44            SnarkAction::WorkVerifyEffect(_) => {}
45            SnarkAction::UserCommandVerify(a) => crate::user_command_verify::reducer(
46                Substate::from_compatible_substate(state),
47                meta.with_action(a),
48            ),
49            SnarkAction::UserCommandVerifyEffect(_) => {}
50        }
51    }
52}