15 stable releases
new 2.0.5 | Dec 20, 2024 |
---|---|
2.0.4 | Dec 19, 2024 |
1.0.10 | Dec 10, 2024 |
1.0.2 | Nov 20, 2024 |
#198 in Data structures
1,541 downloads per month
63KB
1.5K
SLoC
datalogic-rs
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 error handling
- ๐ฆ Zero external runtime dependencies (only serde_json)
- ๐ Optimized performance with zero-copy deserialization
- ๐งต Thread-safe design using Arc for operator sharing
Installation
Add to your Cargo.toml
:
[dependencies]
datalogic-rs = "2.0.0"
Quick Example
use datalogic_rs::JsonLogic;
use serde_json::json;
fn main() {
// Complex discount rule example
let discount_rule = 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
]
});
let data = json!({
"cart": {
"total": 120.00
},
"user": {
"membership": "premium"
}
});
let rule = Rule::from_value(&discount_rule).unwrap();
let price = JsonLogic::apply(&rule, &data).unwrap();
assert_eq!(price, json!(90.0)); // 25% off 120
}
Supported Operations
All JSONLogic operations are supported:
- 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
- Custom:
preserve
for data preservation
Performance
The library is optimized for production use with:
- Efficient operator dispatch using Arc
- Zero-copy JSON handling
- Optional auto-traversal of nested rules
- 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.
Dependencies
~0.7โ1.6MB
~34K SLoC