diff --git a/core/engine/src/handler/table/zen.rs b/core/engine/src/handler/table/zen.rs index 9418d192..2d3c5f8f 100644 --- a/core/engine/src/handler/table/zen.rs +++ b/core/engine/src/handler/table/zen.rs @@ -12,6 +12,7 @@ use zen_expression::isolate::Isolate; #[derive(Debug, Serialize)] struct RowResult { rule: Option>, + reference_map: Option>, index: usize, #[serde(skip)] output: RowOutput, @@ -134,6 +135,7 @@ impl<'a> DecisionTableHandler<'a> { return Some(RowResult { output: outputs, rule: None, + reference_map: None, index, }); } @@ -144,16 +146,22 @@ impl<'a> DecisionTableHandler<'a> { }; let mut expressions: HashMap = Default::default(); + let mut reference_map: HashMap = Default::default(); expressions.insert("_id".to_string(), rule_id.clone()); for input in &content.inputs { let rule_value = rule.get(input.id.as_str())?; expressions.insert(input.field.clone(), rule_value.clone()); + + if let Some(reference) = self.isolate.get_reference(input.field.as_str()) { + reference_map.insert(input.field.clone(), reference); + } } Some(RowResult { output: outputs, rule: Some(expressions), + reference_map: Some(reference_map), index, }) } diff --git a/core/expression/src/isolate.rs b/core/expression/src/isolate.rs index e5e2b096..a3a009c4 100644 --- a/core/expression/src/isolate.rs +++ b/core/expression/src/isolate.rs @@ -118,6 +118,13 @@ impl<'a> Isolate<'a> { Ok(()) } + pub fn get_reference(&self, reference: &'a str) -> Option { + let refs = self.references.borrow(); + let var = refs.get(reference)?; + + (*var).try_into().ok() + } + pub fn run_standard(&self, source: &'a str) -> Result { self.clear();