Expand description
§Rust Rule Engine - GRL Edition
A high-performance rule engine for Rust with GRL (Grule Rule Language) support, featuring method calls, object interactions, and complex condition evaluation.
§Features
- 🔥 GRL Support: Full Grule-compatible syntax
- 🎯 Method Calls:
$Object.method(args)and property access - 📊 Knowledge Base: Centralized rule management with salience
- 💾 Working Memory: Facts system for complex object interactions
- ⚡ High Performance: Optimized execution with cycle detection
- 🔄 Arithmetic: Complex calculations in conditions and actions
- 🛡️ Type Safety: Rust’s type system ensures runtime safety
§Quick Start
use rust_rule_engine::*;
fn main() -> Result<()> {
// Create Knowledge Base
let kb = KnowledgeBase::new("Demo");
// Define GRL rule
let rule = r#"
rule "AgeCheck" salience 10 {
when
User.Age >= 18 && User.Country == "US"
then
User.IsAdult = true;
User.DiscountRate = 0.10;
}
"#;
// Parse and add rule
let rules = GRLParser::parse_rules(rule)?;
let parsed_rule = rules.into_iter().next().unwrap();
kb.add_rule(parsed_rule)?;
// Create engine
let mut engine = RustRuleEngine::new(kb);
// Create facts
let facts = Facts::new();
let user = FactHelper::create_user("john", 25, "john@email.com", "US", false);
facts.add_value("User", user)?;
// Execute rules
let result = engine.execute(&facts)?;
println!("Rules fired: {}", result.rules_fired);
Ok(())
}§Advanced Features
§Method Calls and Object Interactions
let speedup_rule = r#"
rule "SpeedUp" salience 10 {
when
$TestCar : TestCarClass( speedUp == true && speed < maxSpeed )
then
$TestCar.setSpeed($TestCar.Speed + $TestCar.SpeedIncrement);
update($TestCar);
}
"#;§E-commerce Rules
let discount_rule = r#"
rule "PremiumDiscount" salience 20 {
when
Customer.Membership == "premium" && Order.Total > 100
then
Order.DiscountRate = 0.15;
Order.FreeShipping = true;
}
"#;§Core Components
KnowledgeBase: Manages collections of rules with metadataFacts: Working memory for data objects and rule evaluationRustRuleEngine: Executes rules with configurable optionsGRLParser: Parses Grule Rule Language syntaxFactHelper: Utility functions for creating data objectsValue: Flexible data type system supporting objects, arrays, primitives
Re-exports§
pub use errors::Result;pub use errors::RuleEngineError;pub use types::ActionType;pub use types::LogicalOperator;pub use types::Operator;pub use types::Value;pub use engine::engine::EngineConfig;pub use engine::engine::GruleExecutionResult;pub use engine::engine::RustRuleEngine;pub use engine::facts::FactHelper;pub use engine::facts::Facts;pub use engine::knowledge_base::KnowledgeBase;pub use engine::rule::Condition;pub use engine::rule::ConditionGroup;pub use engine::rule::Rule;pub use parser::grl::GRLParser;
Modules§
- engine
- Rule execution engine and related components
- errors
- Error types and result handling
- parser
- Rule parsing and language support
- streaming
- Streaming rule engine for real-time event processing Rule Streaming Engine - Real-time Event Processing
- types
- Core type definitions for values, operators, and actions
Macros§
- impl_
fact - Macro to implement Fact trait easily
Structs§
- Rule
Engine Builder - Builder pattern for creating a RustRuleEngine with various configurations