[−][src]Crate v_eval
Evaluate some expresions with context
use v_eval::{Value, Eval}; let e = Eval::default() .insert("foo", "true")? .insert("string", "\"foo\"")? .insert("opt", "Some(true)")? .insert("bar", "false")?; assert_eq!(e.eval("foo != bar").unwrap(), Value::Bool(true)); assert_eq!( e.eval("true && foo != bar && true").unwrap(), Value::Bool(true) ); assert_eq!(e.eval("1 == 1 != bar").unwrap(), Value::Bool(true)); assert_eq!(e.eval("1 == 1 + 1 == bar").unwrap(), Value::Bool(true)); assert_eq!(e.eval("1.5.trunc()").unwrap(), Value::Int(1)); assert_eq!(e.eval("50.log10().trunc() == 1").unwrap(), Value::Bool(true)); assert_eq!(e.eval("Some(1.log10()).unwrap()").unwrap(), Value::Float(1.0f64.log10())); // Option by default assert_eq!(e.eval("None.unwrap()"), None); assert_eq!(e.eval("not_exist.unwrap_or(1)").unwrap(), Value::Int(1)); assert_eq!(e.eval("opt.xor(Some(1))").unwrap(), Value::Option(Box::new(None))); assert_eq!(e.eval("not_exist.and(Some(1)).is_some()").unwrap(), Value::Bool(false)); assert_eq!(e.eval("foo.unwrap_or(false)").unwrap(), Value::Bool(true)); // Dynamic type checked assert_eq!(e.eval("foo.is_bool()").unwrap(), Value::Bool(true)); assert_eq!(e.eval("string.is_bool()").unwrap(), Value::Bool(false)); assert_eq!(e.eval("string.is_vec()").unwrap(), Value::Bool(false)); assert_eq!(e.eval("foo.is_same(bar)").unwrap(), Value::Bool(true));
Structs
Eval | Evaluator with context |
Enums
Value | Wrapper for value implements simple operations and check types |
Functions
eval |