expr/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
//!
//! Example:
//! ```
//! use expr::{Context, Parser};
//!
//! let mut p = Parser::new();
//!
//! let mut ctx = Context::default();
//! ctx.insert("two".to_string(), 2);
//!
//! let three: i64 = p.eval("1 + two", &ctx).unwrap().as_number().unwrap();
//! assert_eq!(three, 3);
//!
//! p.add_function("add", |c| {
//! let mut sum = 0;
//! for arg in c.args {
//! sum += arg.as_number().unwrap();
//! }
//! Ok(sum.into())
//! });
//!
//! let six: i64 = p.eval("add(1, two, 3)", &ctx).unwrap().as_number().unwrap();
//! assert_eq!(six, 6);
//! ```
mod ast;
mod context;
mod error;
mod functions;
mod parser;
mod pest;
mod pratt;
#[cfg(test)]
mod test;
mod value;
pub use crate::context::Context;
pub use crate::error::{Error, Result};
pub use crate::parser::Parser;
pub use crate::ast::program::Program;
pub use crate::value::Value;
use pest_derive::Parser as PestParser;
#[derive(PestParser)]
#[grammar = "expr.pest"]
pub(crate) struct ExprPest;