rust-rule-engine 0.1.4

A high-performance rule engine for Rust with GRL (Grule Rule Language) support, file-based rules, custom functions, and method calls
Documentation
use std::fs;

fn main() {
    let grl_content = r#"rule "TestRule" {
when
User.Age > 18
then
User.setStatus("adult");
}"#;
    
    println!("Testing GRL content:");
    println!("{}", grl_content);
    
    // Simple test to extract rule blocks
    let mut blocks = Vec::new();
    let mut current_block = String::new();
    let mut brace_count = 0;
    let mut in_rule = false;

    for line in grl_content.lines() {
        let line = line.trim();
        println!("Processing line: '{}'", line);

        if line.starts_with("rule ") {
            println!("Found rule start");
            in_rule = true;
            current_block.clear();
            current_block.push_str(line);
            current_block.push('\n');

            // Count braces in the rule declaration line
            for ch in line.chars() {
                match ch {
                    '{' => {
                        brace_count += 1;
                        println!("Open brace, count: {}", brace_count);
                    },
                    '}' => {
                        brace_count -= 1;
                        println!("Close brace, count: {}", brace_count);
                        if brace_count == 0 {
                            blocks.push(current_block.clone());
                            current_block.clear();
                            in_rule = false;
                            break;
                        }
                    }
                    _ => {}
                }
            }
            continue;
        }

        if in_rule {
            println!("In rule, adding line: '{}'", line);
            current_block.push_str(line);
            current_block.push('\n');

            for ch in line.chars() {
                match ch {
                    '{' => {
                        brace_count += 1;
                        println!("Open brace, count: {}", brace_count);
                    },
                    '}' => {
                        brace_count -= 1;
                        println!("Close brace, count: {}", brace_count);
                        if brace_count == 0 {
                            blocks.push(current_block.clone());
                            current_block.clear();
                            in_rule = false;
                            break;
                        }
                    }
                    _ => {}
                }
            }
        }
    }
    
    println!("Found {} blocks", blocks.len());
    for (i, block) in blocks.iter().enumerate() {
        println!("Block {}: '{}'", i, block);
    }
}