Skip to main content

eval_dmn/
eval_dmn.rs

1//! Evaluate a decision table: `cargo run -p bpmnkit --example eval_dmn`.
2
3use bpmnkit::dmn::evaluate_decision_graph;
4use bpmnkit::prelude::*;
5
6const DMN: &str = r#"<?xml version="1.0" encoding="UTF-8"?>
7<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" id="d" name="d" namespace="http://example.com">
8  <decision id="tier" name="tier">
9    <decisionTable id="t" hitPolicy="FIRST">
10      <input id="i"><inputExpression id="ie" typeRef="number"><text>amount</text></inputExpression></input>
11      <output id="o" typeRef="string"/>
12      <rule id="r1"><inputEntry id="ie1"><text>&gt; 1000</text></inputEntry><outputEntry id="oe1"><text>"manager"</text></outputEntry></rule>
13      <rule id="r2"><inputEntry id="ie1"><text></text></inputEntry><outputEntry id="oe1"><text>"auto"</text></outputEntry></rule>
14    </decisionTable>
15  </decision>
16</definitions>"#;
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19    let Document::Dmn(definitions) = load(DMN)? else {
20        unreachable!("the input is DMN");
21    };
22    let mut vars = Context::new();
23    vars.insert("amount", 1500);
24    let out = evaluate_decision_graph(&definitions, "tier", &vars)?;
25    println!("tier = {}", out.result);
26    Ok(())
27}