datalogic-rs 2.0.17

A fast, type-safe Rust implementation of JSONLogic for evaluating logical rules as JSON. Perfect for business rules engines and dynamic filtering in Rust applications.
Documentation

datalogic-rs

CI Status Documentation crates.io

A high-performance Rust implementation of JSONLogic that provides a way to write portable logic rules as JSON. Fully compliant with the JSONLogic specification and optimized for production use.

Overview

datalogic-rs offers a complete, thread-safe implementation of the JSONLogic specification with:

  • ๐Ÿ’ฏ 100% compliance with official JSONLogic test suite
  • ๐Ÿ›ก๏ธ Strong type safety and comprehensive error handling
  • ๐Ÿ“ฆ Minimal dependencies (only serde_json, thiserror, smallvec)
  • ๐Ÿš€ Zero-copy deserialization and optimized rule evaluation
  • ๐Ÿงต Thread-safe design with static operators
  • ๐Ÿ”„ Smart rule optimization and caching

Installation

Add to your Cargo.toml:

[dependencies]
datalogic-rs = "2.0.15"

Quick Example

use datalogic_rs::{JsonLogic, Rule};
use serde_json::json;

fn main() {
    // Complex discount rule example
    let discount_rule = Rule::from_value(&json!({
        "if": [
            {"and": [
                {">": [{"var": "cart.total"}, 100]},
                {"==": [{"var": "user.membership"}, "premium"]}
            ]},
            {"*": [{"var": "cart.total"}, 0.75]}, // 25% discount
            {"*": [{"var": "cart.total"}, 1.0]}   // no discount
        ]
    })).unwrap();

    let data = json!({
        "cart": {
            "total": 120.00
        },
        "user": {
            "membership": "premium"
        }
    });

    let result = JsonLogic::apply(&discount_rule, &data).unwrap();
    assert_eq!(result, json!(90.0)); // 25% off 120
}

Features

Core Operations

  • Comparison: ==, ===, !=, !==, >, >=, <, <=
  • Logic: !, !!, or, and, if, ?:
  • Numeric: +, -, *, /, %, min, max
  • Array: map, filter, reduce, all, none, some, merge
  • String: substr, cat, in
  • Data: var, missing, missing_some

Advanced Features

  • Static Optimization: Rules are optimized during compilation
  • Error Recovery: try operator for handling evaluation errors
  • Data Preservation: preserve operator for maintaining data structure
  • Zero-Copy Design: Efficient memory usage with minimal allocation
  • Type Coercion: Consistent type handling following JSONLogic spec

Performance

The library is heavily optimized for production use with:

  • Static operator dispatch
  • Zero-copy JSON deserialization
  • Smart rule optimization
  • Efficient memory management with SmallVec
  • Comprehensive benchmarking suite

Testing

100% compatibility with official JSONLogic tests:

cargo test    # Run unit tests
cargo bench   # Run performance benchmarks

License

Licensed under Apache-2.0

Contributing

Contributions are welcome! The codebase has extensive documentation and test coverage.