Thanks to visit codestin.com
Credit goes to lib.rs

13 releases

0.3.2 Jun 16, 2025
0.3.1 Jun 15, 2025
0.3.0 Mar 18, 2025
0.2.2 Jan 5, 2025
0.1.6 Nov 25, 2024

#373 in Parser implementations

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

8,212 downloads per month
Used in 3 crates (2 directly)

MIT license

99KB
2.5K SLoC

expr-lang

Implementation of expr in rust.

Usage

use expr::{Context, Environment, self};

fn main() {
    let mut ctx = Context::default();
    ctx.insert("two".to_string(), 2);

    let three: i64 = expr::eval("1 + two", &ctx).unwrap().as_number().unwrap();
    assert_eq!(three, 3);

    let mut env = Environment::new();
    env.add_function("add", |c| {
        let mut sum = 0;
        for arg in c.args {
            sum += arg.as_number().unwrap();
        }
        Ok(sum.into())
    });

    let six: i64 = env.eval("add(1, two, 3)", &ctx).unwrap().as_number().unwrap();
    assert_eq!(six, 6);
}

Serde integration

Converting expr values to/from rust types

[dependencies]
expr-lang = { version = "0.3", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
use expr::{Value, to_value, from_value};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Foo {
    a: i64,
    b: String,
}

fn main() {
    let foo = Foo {
        a: 1,
        b: "hello".to_string(),
    };

    let value: Value = to_value(&foo).unwrap();
    assert_eq!(value, Value::Map(IndexMap::from([
        ("a".to_string(), Value::Number(1)),
    ])));
    assert_eq!(from_value::<Foo>(value).unwrap(), foo);
}

Converting expr values to/from serial data

[dependencies]
expr-lang = { version = "0.3", features = ["serde"] }
serde_json = "1.0"
use expr::Value;
use serde_json::{from_str, to_string};

fn main() {
    let json = r#"{
        "a": 1,
        "b": "hello"
    }"#;

    let value: Value = from_str(json).unwrap();
    assert_eq!(value, Value::Map(IndexMap::from([
        ("a".to_string(), Value::Number(1)),
    ])));
    assert_eq!(to_string(&value).unwrap(), r#"{\"a\":1,\"b\":\"hello\"}"#);
}

Dependencies

~5–7MB
~126K SLoC