Crate evalx

Crate evalx 

Source
Expand description

Evalx is a powerful expression evaluator.

This crate is a maintained fork and further development of the original eval by fengcen. It includes bugfixes and updates such as migrating the Rust edition to 2021 while keeping the public API compatible.

Supported operators: ! != "" '' () [] . , > < >= <= == + - * / % && || n..m.

Built-in functions: min() max() len() is_empty() array().

§Examples

You can do mathematical calculations with supported operators:

use evalx::{eval, to_value};

assert_eq!(eval("1 + 2 + 3"), Ok(to_value(6)));
assert_eq!(eval("2 * 2 + 3"), Ok(to_value(7)));
assert_eq!(eval("2 / 2 + 3"), Ok(to_value(4.0)));
assert_eq!(eval("2 / 2 + 3 / 3"), Ok(to_value(2.0)));

You can eval with context:

use evalx::{Expr, to_value};

assert_eq!(Expr::new("foo == bar")
               .value("foo", true)
               .value("bar", true)
               .exec(),
           Ok(to_value(true)));

You can access data like javascript by using . and []. [] supports expression.

use evalx::{Expr, to_value};
use std::collections::HashMap;

let mut object = HashMap::new();
object.insert("foos", vec!["Hello", "world", "!"]);

assert_eq!(Expr::new("object.foos[2-1] == 'world'") // Access field `foos` and index `2-1`
               .value("object", object)
               .exec(),
           Ok(to_value(true)));

You can eval with function:

use evalx::{Expr, to_value};

assert_eq!(Expr::new("say_hello()")
               .function("say_hello", |_| Ok(to_value("Hello world!")))
               .exec(),
           Ok(to_value("Hello world!")));

You can create an array with array():

use evalx::{eval, to_value};

assert_eq!(eval("array(1, 2, 3, 4, 5)"), Ok(to_value(vec![1, 2, 3, 4, 5])));

You can create an integer array with n..m:

use evalx::{eval, to_value};

assert_eq!(eval("0..5"), Ok(to_value(vec![0, 1, 2, 3, 4])));

§Built-in functions

§min()

Accept multiple arguments and return the minimum value.

§max()

Accept multiple arguments and return the maximum value.

§len()

Accept single arguments and return the length of value. Only accept String, Array, Object and Null.

§is_empty()

Accept single arguments and return a boolean. Check whether the value is empty or not.

§array()

Accept multiple arguments and return an array.

Structs§

ExecOptions
Execute options
Expr
Expression builder
Function
Custom function

Enums§

Error
Expression parsing error
Value
Represents any valid JSON value.

Functions§

eval
Evaluates the value of an expression.
to_value
Convert variable to serde_json::Value

Type Aliases§

Context
Custom context.
Contexts
Custom contexts. The value of the last context is searched first.
Functions
Custom functions.