json_rules_engine_fork/
rule.rs1use crate::{
2 condition::{Condition, ConditionResult},
3 event::CoalescenceEvent,
4};
5#[cfg(feature = "eval")]
6use rhai::Engine;
7use serde::{Deserialize, Serialize};
8use serde_json::Value;
9
10#[derive(Clone, Debug, Serialize, Deserialize)]
11pub struct Rule {
12 pub conditions: Condition,
13 pub events: Vec<CoalescenceEvent>,
14}
15
16impl Rule {
17 pub fn check_value(
18 &self,
19 info: &Value,
20 #[cfg(feature = "eval")] rhai_engine: &Engine,
21 ) -> RuleResult {
22 let condition_result = self.conditions.check_value(
23 info,
24 #[cfg(feature = "eval")]
25 rhai_engine,
26 );
27
28 let mut events = self.events.clone();
29
30 for CoalescenceEvent {
31 coalescence_group, ..
32 } in &mut events
33 {
34 if let Some(coalescence_group) = coalescence_group {
35 if let Ok(new_coalescence_group) =
36 &mut mustache::compile_str(coalescence_group)
37 .and_then(|template| template.render_to_string(info))
38 {
39 *coalescence_group = new_coalescence_group.clone();
40 }
41 }
42 }
43
44 RuleResult {
45 condition_result,
46 events,
47 }
48 }
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52pub struct RuleResult {
53 pub condition_result: ConditionResult,
54 pub events: Vec<CoalescenceEvent>,
55}