Crate rscel

Source
Expand description

RsCel is a CEL evaluator written in Rust. CEL is a google project that describes a turing-incomplete language that can be used to evaluate a user provdided expression. The language specification can be found here.

The design goals of this project were are as follows:

  • Flexible enough to allow for a user to bend the spec if needed
  • Sandbox’ed in such a way that only specific values can be bound
  • Can be used as a wasm depenedency (or other ffi)

The basic example of how to use:

use rscel::{CelContext, BindContext, serde_json};

let mut ctx = CelContext::new();
let mut exec_ctx = BindContext::new();

ctx.add_program_str("main", "foo + 3").unwrap();
exec_ctx.bind_param("foo", 3.into()); // 3 converted to CelValue

let res = ctx.exec("main", &exec_ctx).unwrap(); // CelValue::Int(6)
assert_eq!(res, 6.into());

As of 0.10.0 binding protobuf messages from the protobuf crate is now available! Given the following protobuf message:


message Point {
  int32 x = 1;
  int32 y = 2;
}

The following code can be used to evaluate a CEL expression on a Point message:

use rscel::{CelContext, BindContext};

// currently rscel required protobuf messages to be in a box
let p = Box::new(protos::Point::new());
p.x = 4;
p.y = 5;

let mut ctx = CelContext::new();
let mut exec_ctx = BindContext::new();

ctx.add_program_str("main", "p.x + 3").unwrap();
exec_ctx.bind_protobuf_msg("p", p);

assert_eq!(ctx.exec("main", &exec_ctx).unwrap(), 7.into());

Re-exports§

pub use serde;
pub use serde_json;
pub use rscel_macro as macros;

Modules§

utils

Macros§

compile

Structs§

AstNode
BindContext
Bindings context for a cel evaluation.
CelCompiler
CelContext
The CelContext is the core context in RsCel. This context contains Program information as well as the primary entry point for evaluating an expression.
ExprList
Ident
Member
NoAst
ObjInit
ObjInits
Program
ProgramDetails
SourceLocation
SourceRange
StringTokenizer

Enums§

AddOp
Addition
ByteCode
CelError
CelValue
The basic value of the CEL interpreter.
ConditionalAnd
ConditionalOr
Expr
LiteralsAndKeywords
MemberPrime
MultOp
Multiplication
NegList
NotList
Primary
Relation
Relop
Unary

Traits§

CelValueDyn
FromUnary
Tokenizer

Functions§

into_unary

Type Aliases§

CelResult
RsCelFunction
Prototype for a function binding.
RsCelMacro
Prototype for a macro binding.