feat: add __rule, but cannot run
This commit is contained in:
86
__rule/json-rules-engine/src/main.rs
Normal file
86
__rule/json-rules-engine/src/main.rs
Normal file
@@ -0,0 +1,86 @@
|
||||
use json_rules_engine::{Engine, Rule, Map, from_dynamic};
|
||||
use serde_json::json;
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
#[derive(Deserialize, Serialize)]
|
||||
struct Facts {
|
||||
name: String,
|
||||
age: u8,
|
||||
action: String
|
||||
}
|
||||
|
||||
fn age_greater_than20_less_than_inclusive25(p: Map) -> bool {
|
||||
let facts: Facts = from_dynamic(&p.into()).unwrap();
|
||||
facts.age > 20 && facts.age <= 25
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
pub async fn main() -> anyhow::Result<()> {
|
||||
let sendgrid_api_key = "kjsldkjslkjlwkjkjew";
|
||||
|
||||
let rule_json = json!({
|
||||
"conditions": {
|
||||
"and": [
|
||||
{
|
||||
"field": "name",
|
||||
"operator": "string_equals",
|
||||
"value": "Cheng JIANG"
|
||||
},
|
||||
{
|
||||
"field": "age",
|
||||
"operator": "int_in_range",
|
||||
"value": [20, 25]
|
||||
},
|
||||
{
|
||||
"script": "facts.age > 20 && facts.age <= 25",
|
||||
},
|
||||
{
|
||||
"script": "my_function(facts)",
|
||||
},
|
||||
{
|
||||
"field": "action",
|
||||
"operator": "string_equals",
|
||||
"value": "coding in rust"
|
||||
}
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"type": "post_to_callback_url",
|
||||
"params": {
|
||||
"callback_url": "http://example.com/people/conding_in_rust",
|
||||
"type": "info",
|
||||
"title": "Another person is coding in rust",
|
||||
"message": "Name: {{ name }}, Age: {{ age }}, Action: {{ action }},"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "email_notification",
|
||||
"params": {
|
||||
"from": "alex_cj96@foxmail.com",
|
||||
"to": ["abc.def@gmail.com"],
|
||||
"type": "info",
|
||||
"title": "Another person is coding in rust",
|
||||
"message": "Name: {{ name }}, Age: {{ age }}, Action: {{ action }},"
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
let rule: Rule = serde_json::from_str::<Rule>(&serde_json::to_string(&rule_json).unwrap()).unwrap();
|
||||
|
||||
let mut engine = Engine::new(sendgrid_api_key.into());
|
||||
engine.add_rule(rule);
|
||||
engine.add_function("my_function", age_greater_than20_less_than_inclusive25);
|
||||
|
||||
let facts = json!({
|
||||
"name": "Cheng JIANG",
|
||||
"age": 24,
|
||||
"action": "coding in rust",
|
||||
});
|
||||
|
||||
let rule_results = engine.run(&facts).await?;
|
||||
|
||||
println!("{:?}", rule_results);
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user