def events
bendvy-ecs-core@0.1.0.4 · machine_handler_trace.bend:16
import bendvy-ecs-core@0.1.0.4/machine_handler_trace.bend as MachineHandlerTrace
import Base
import bendvy-ecs-core@0.1.0.4/execution_trace.bend as Trace
import bendvy-ecs-core@0.1.0.4/trace_facts.bend as Facts
16def events(items:List<&2,Facts.Fact>,+barrier:Bool,+identity:Maybe<&2,Trace.Identity>) -> List<&2,Trace.TraceEvent<String>>:
17 match items:
18 case []:[]
19 case Facts.BoundaryFact{Facts.PhaseBoundary{name}} <> rest:Trace.PhaseEntered{name} <> events(rest,False{},None{})
20 case Facts.BoundaryFact{Facts.BarrierEntered{}} <> rest:events(rest,True{},None{})
21 case Facts.BoundaryFact{Facts.BarrierFinished{}} <> rest:Trace.DeferredApplied{} <> events(rest,False{},None{})
22 case Facts.HandlerFact{+namespace,+id,+name,ordinal,phase,from,to,result} <> rest:Trace.ExecutionOperationObserved{Facts.HandlerFact{namespace,id,name,ordinal,phase,from,to,result}} <> events(rest,barrier,Some{Trace.Identity{namespace,id,Some{name}}})
23 case Facts.ReaderFact{+namespace,+id,+name,readerId,domain,lagged} <> rest:Trace.OperationObserved{Trace.Identity{namespace,id,Some{name}},Facts.ReaderFact{namespace,id,name,readerId,domain,lagged}} <> events(rest,barrier,identity)
24 case fact <> rest:observed(fact,barrier,identity) <> events(rest,barrier,identity)