datalogic-rs
A lightweight, high-performance Rust implementation of JSONLogic, optimized for rule-based decision-making and dynamic expressions.
✨ Why datalogic-rs?
- 🏆 Fully JSONLogic-compliant (100% test coverage)
- 🚀 Fast & lightweight: Zero-copy JSON parsing, minimal allocations
- 🔒 Thread-safe: Designed for parallel execution
- ⚡ Optimized for production: Static dispatch, caching, and rule optimization
📦 Installation
Add datalogic-rs to your Cargo.toml:
[]
= "2.0.17"
🚀 Quick Start: Evaluating JSONLogic Rules
use ;
use json;
🛠️ Features
✅ Supported Operations
| Category | Operators |
|---|---|
| Comparisons | ==, ===, !=, !==, >, >=, <, <= |
| Logic | and, or, if, !, !! |
| Math | +, -, *, /, %, min, max |
| Arrays | map, filter, reduce, all, none, some, merge |
| Strings | substr, cat, in |
| Data Handling | var, missing, missing_some |
💡 Advanced Features
- Static Optimization: Rules are optimized at compile-time for faster execution.
- Error Handling: The
tryoperator prevents rule evaluation failures. - Memory Efficiency: Zero-copy JSON deserialization with SmallVec.
- Type Coercion: JSONLogic-compliant automatic type conversions.
🎯 Use Cases
datalogic-rs is ideal for rule-based decision engines in:
- Feature flagging (Enable features dynamically based on user attributes)
- Dynamic pricing (Apply discounts or surge pricing based on conditions)
- Fraud detection (Evaluate transaction risk using JSON-based rules)
- Form validation (Check field dependencies dynamically)
📊 Performance
Benchmark results show datalogic-rs is 2x faster than other JSONLogic implementations, thanks to:
- Static operator dispatch
- Optimized rule execution
- Smart caching for reusable expressions
To run benchmarks:
🛠️ Contributing
We welcome contributions! See the CONTRIBUTING.md for details.
📜 License: Apache-2.0
🚀 Next Steps
✅ Try out datalogic-rs today!
📖 Check out the docs.rs documentation
⭐ Star the GitHub repository if you find it useful!