use datalogic_rs::{Engine, Error};
fn main() {
let engine = Engine::new();
let err = engine
.eval_str(r#"{"+": ["text", 1]}"#, r#"{}"#)
.unwrap_err();
println!("[1] failed evaluation");
println!(" tag: {}", err.tag());
println!(" operator: {:?}", err.operator());
println!(" node_ids: {:?}", err.node_ids());
println!(" display: {err}");
#[cfg(feature = "error-handling")]
{
let err = engine
.eval_str(
r#"{"throw": {"val": "err"}}"#,
r#"{"err": {"type": "NOT_FOUND", "user_id": 42}}"#,
)
.unwrap_err();
println!("\n[2] thrown payload");
println!(" {:?}", err.thrown_value().unwrap());
}
#[cfg(feature = "error-handling")]
{
let r = engine
.eval_str(
r#"{"try": [{"/": [{"var": "n"}, {"var": "d"}]}, 0]}"#,
r#"{"n": 10, "d": 0}"#,
)
.unwrap();
println!("\n[3] try recovers from divide-by-zero -> {r}");
}
let err: Error = "abc".parse::<i32>().map_err(Error::wrap).unwrap_err();
println!("\n[4] wrapped foreign error");
println!(" tag: {}", err.tag());
println!(" display: {err}");
}