@@ -11,19 +11,32 @@ use db::Db;
1111pub use error:: { ExecutorError , ExecutorResult } ;
1212use mosaic_cac_types:: state_machine:: {
1313 StateMachineId ,
14- evaluator:: { ActionContainer as EvaluatorActionContainer , Input as EvaluatorInput } ,
15- garbler:: { ActionContainer as GarblerActionContainer , Input as GarblerInput } ,
14+ evaluator:: {
15+ ActionContainer as EvaluatorActionContainer , EvaluatorInitData , Input as EvaluatorInput ,
16+ } ,
17+ garbler:: { ActionContainer as GarblerActionContainer , GarblerInitData , Input as GarblerInput } ,
1618} ;
1719
18- use crate :: { evaluator:: handle_evaluator_input, garbler:: handle_garbler_input} ;
20+ use crate :: {
21+ evaluator:: { handle_evaluator_init, handle_evaluator_input, handle_evaluator_restore} ,
22+ garbler:: { handle_garbler_init, handle_garbler_input, handle_garbler_restore} ,
23+ } ;
1924
2025/// All possible state machine inputs
2126#[ derive( Debug ) ]
2227pub enum Input {
2328 /// Garbler SM inputs
2429 Garbler ( GarblerInput ) ,
30+ /// Special case to initialize garbler state machine
31+ GarblerInit ( GarblerInitData ) ,
32+ /// Restore state machine and re-dispatch actions.
33+ GarblerRestore ,
2534 /// Evaluator SM inputs
2635 Evaluator ( EvaluatorInput ) ,
36+ /// Special case to initialize evaluator state machine
37+ EvaluatorInit ( EvaluatorInitData ) ,
38+ /// Restore state machine and re-dispatch actions.
39+ EvaluatorRestore ,
2740}
2841
2942/// Input to state machine executor, consisiting of state machine id and input to state machine.
@@ -59,14 +72,35 @@ pub async fn sm_executor<D: Db>(
5972 ex_input : ExecutorInput ,
6073 db : Arc < D > ,
6174) -> ExecutorResult < ActionContainer > {
75+ let sm_id = ex_input. sm_id ;
6276 let actions = match ex_input. sm_input {
6377 Input :: Garbler ( input) => {
64- let actions = handle_garbler_input ( ex_input. sm_id , input, db. clone ( ) ) . await ?;
78+ let actions = handle_garbler_input ( sm_id, input, db) . await ?;
79+
80+ ActionContainer :: Garbler ( actions)
81+ }
82+ Input :: GarblerInit ( init_data) => {
83+ let actions = handle_garbler_init ( sm_id, init_data, db) . await ?;
84+
85+ ActionContainer :: Garbler ( actions)
86+ }
87+ Input :: GarblerRestore => {
88+ let actions = handle_garbler_restore ( sm_id, db) . await ?;
6589
6690 ActionContainer :: Garbler ( actions)
6791 }
6892 Input :: Evaluator ( input) => {
69- let actions = handle_evaluator_input ( ex_input. sm_id , input, db. clone ( ) ) . await ?;
93+ let actions = handle_evaluator_input ( sm_id, input, db) . await ?;
94+
95+ ActionContainer :: Evaluator ( actions)
96+ }
97+ Input :: EvaluatorInit ( init_data) => {
98+ let actions = handle_evaluator_init ( sm_id, init_data, db) . await ?;
99+
100+ ActionContainer :: Evaluator ( actions)
101+ }
102+ Input :: EvaluatorRestore => {
103+ let actions = handle_evaluator_restore ( sm_id, db) . await ?;
70104
71105 ActionContainer :: Evaluator ( actions)
72106 }
0 commit comments