@@ -16,7 +16,7 @@ use crate::runtime::remote::RemoteRuntime;
1616use crate :: types:: exit_reason:: ExitReason ;
1717use crate :: types:: signal:: Signal ;
1818use compiler:: compile_flow;
19- pub use emitter:: { EmitType , RespondEmitter } ;
19+ pub use emitter:: { EmitType , ExecutionId , RespondEmitter } ;
2020
2121fn null_value ( ) -> Value {
2222 Value {
@@ -71,8 +71,10 @@ impl ExecutionEngine {
7171 respond_emitter : Option < & dyn RespondEmitter > ,
7272 with_trace : bool ,
7373 ) -> ( Signal , ExitReason ) {
74+ let execution_id = ExecutionId :: new_v4 ( ) ;
75+
7476 if let Some ( emitter) = respond_emitter {
75- emitter. emit ( EmitType :: StartingExec , null_value ( ) ) ;
77+ emitter. emit ( execution_id , EmitType :: StartingExec , null_value ( ) ) ;
7678 }
7779
7880 let mut value_store = match flow_input {
@@ -85,7 +87,7 @@ impl ExecutionEngine {
8587 Err ( err) => {
8688 let runtime_error = err. as_runtime_error ( ) ;
8789 if let Some ( emitter) = respond_emitter {
88- emitter. emit ( EmitType :: FailedExec , runtime_error. as_value ( ) ) ;
90+ emitter. emit ( execution_id , EmitType :: FailedExec , runtime_error. as_value ( ) ) ;
8991 }
9092 let signal = Signal :: Failure ( runtime_error) ;
9193 return ( signal, ExitReason :: Failure ) ;
@@ -97,6 +99,7 @@ impl ExecutionEngine {
9799 & self . handlers ,
98100 & mut value_store,
99101 remote,
102+ execution_id,
100103 respond_emitter,
101104 with_trace,
102105 ) ;
@@ -108,11 +111,13 @@ impl ExecutionEngine {
108111 }
109112 if let Some ( emitter) = respond_emitter {
110113 match & signal {
111- Signal :: Failure ( err) => emitter. emit ( EmitType :: FailedExec , err. as_value ( ) ) ,
114+ Signal :: Failure ( err) => {
115+ emitter. emit ( execution_id, EmitType :: FailedExec , err. as_value ( ) )
116+ }
112117 Signal :: Success ( value) | Signal :: Return ( value) | Signal :: Respond ( value) => {
113- emitter. emit ( EmitType :: FinishedExec , value. clone ( ) )
118+ emitter. emit ( execution_id , EmitType :: FinishedExec , value. clone ( ) )
114119 }
115- Signal :: Stop => emitter. emit ( EmitType :: FinishedExec , null_value ( ) ) ,
120+ Signal :: Stop => emitter. emit ( execution_id , EmitType :: FinishedExec , null_value ( ) ) ,
116121 }
117122 }
118123 let exit_reason = signal. exit_reason ( ) ;
@@ -386,7 +391,7 @@ mod tests {
386391 fn emitter_emits_start_and_finish_for_successful_execution ( ) {
387392 let engine = ExecutionEngine :: new ( ) ;
388393 let events = RefCell :: new ( Vec :: < EmitType > :: new ( ) ) ;
389- let emitter = |emit_type : EmitType , _value : Value | {
394+ let emitter = |_execution_id , emit_type : EmitType , _value : Value | {
390395 events. borrow_mut ( ) . push ( emit_type) ;
391396 } ;
392397
@@ -413,7 +418,7 @@ mod tests {
413418 fn emitter_emits_ongoing_for_intermediate_respond ( ) {
414419 let engine = ExecutionEngine :: new ( ) ;
415420 let events = RefCell :: new ( Vec :: < EmitType > :: new ( ) ) ;
416- let emitter = |emit_type : EmitType , _value : Value | {
421+ let emitter = |_execution_id , emit_type : EmitType , _value : Value | {
417422 events. borrow_mut ( ) . push ( emit_type) ;
418423 } ;
419424
@@ -466,7 +471,7 @@ mod tests {
466471 fn emitter_emits_failed_for_runtime_failure ( ) {
467472 let engine = ExecutionEngine :: new ( ) ;
468473 let events = RefCell :: new ( Vec :: < EmitType > :: new ( ) ) ;
469- let emitter = |emit_type : EmitType , _value : Value | {
474+ let emitter = |_execution_id , emit_type : EmitType , _value : Value | {
470475 events. borrow_mut ( ) . push ( emit_type) ;
471476 } ;
472477
0 commit comments