// 执行上下文 Execution —— 移植自 rust engine.rs L21-L57
// 独立小包:engine / handler / interceptor / spi 共同依赖,避免包循环。

///|
pub(all) struct Execution {
  mut process_instance : @model.ProcessInstance
  mut process_model : @parser.ProcessModel
  mut process_define : @model.ProcessDefine
  mut current_node : @parser.NodeModel?
  mut process_task : @model.ProcessTask?
  mut process_task_list : Array[@model.ProcessTask]
  mut args : @json.FlowData
  mut operator : String
  mut is_merged : Bool
  /// 本步新创建的任务
  mut new_tasks : Array[@model.ProcessTask]
  /// 本步实例是否终结(finish/reject)
  mut instance_finished : Bool
  /// 会签门控表达式变量(nrOfInstances 等)
  mut gate_vars : @json.FlowData
}

///|
pub fn Execution::make(
  instance : @model.ProcessInstance,
  model : @parser.ProcessModel,
  define : @model.ProcessDefine,
  operator : String,
  args : @json.FlowData
) -> Execution {
  {
    process_instance: instance,
    process_model: model,
    process_define: define,
    current_node: None,
    process_task: None,
    process_task_list: [],
    args,
    operator,
    is_merged: false,
    new_tasks: [],
    instance_finished: false,
    gate_vars: @json.FlowData::new(),
  }
}