feat: evaluation reference map trace; (#28)

* feat: evaluation reference map trace;

* fix: cargo fmt

* reduce performance penalty;
This commit is contained in:
stefan-gorules
2023-04-26 22:27:30 +02:00
committed by GitHub
parent 1e883cb810
commit 69a794785a
2 changed files with 15 additions and 0 deletions
+8
View File
@@ -12,6 +12,7 @@ use zen_expression::isolate::Isolate;
#[derive(Debug, Serialize)]
struct RowResult {
rule: Option<HashMap<String, String>>,
reference_map: Option<HashMap<String, Value>>,
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<String, String> = Default::default();
let mut reference_map: HashMap<String, Value> = 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,
})
}
+7
View File
@@ -118,6 +118,13 @@ impl<'a> Isolate<'a> {
Ok(())
}
pub fn get_reference(&self, reference: &'a str) -> Option<Value> {
let refs = self.references.borrow();
let var = refs.get(reference)?;
(*var).try_into().ok()
}
pub fn run_standard(&self, source: &'a str) -> Result<Value, IsolateError> {
self.clear();