use bumpalo::Bump;
use datalogic_rs::datavalue::OwnedDataValue;
use datalogic_rs::{DataValue, Engine};
use serde_json::json;
fn main() {
let engine = Engine::new();
let compiled = engine
.compile(r#"{"==": [{"var": "status"}, "active"]}"#)
.unwrap();
let arena = Bump::new();
let result = engine
.evaluate(&compiled, r#"{"status": "active"}"#, &arena)
.unwrap();
println!("&str -> {:?}", result.as_bool());
let arena = Bump::new();
let input_json = json!({"status": "active"});
let result = engine.evaluate(&compiled, &input_json, &arena).unwrap();
println!("&serde Value -> {:?}", result.as_bool());
let arena = Bump::new();
let owned = OwnedDataValue::from_json(r#"{"status": "active"}"#).unwrap();
let result = engine.evaluate(&compiled, &owned, &arena).unwrap();
println!("&OwnedDataValue-> {:?}", result.as_bool());
let arena = Bump::new();
let input: &DataValue<'_> =
arena.alloc(DataValue::from_str(r#"{"status": "active"}"#, &arena).unwrap());
let result = engine.evaluate(&compiled, *input, &arena).unwrap();
println!("DataValue -> {:?}", result.as_bool());
let arena_before = arena.allocated_bytes();
let result = engine.evaluate(&compiled, input, &arena).unwrap();
let arena_after = arena.allocated_bytes();
println!(
"&DataValue -> {:?} (input bytes added: {})",
result.as_bool(),
arena_after - arena_before,
);
}