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}