Skip to main content

lists/
lists.rs

1//! List operations in CEL.
2//!
3//! Run with: cargo run -p cel-core --example lists
4
5use cel_core::{CelType, Env, MapActivation, Value};
6
7fn main() {
8    let env = Env::with_standard_library().with_variable("numbers", CelType::list(CelType::Int));
9
10    let mut activation = MapActivation::new();
11    activation.insert("numbers", Value::list([1, 5, 3, 8, 2]));
12
13    // Filter: keep only values > 3
14    let ast = env.compile("numbers.filter(x, x > 3)").unwrap();
15    let program = env.program(&ast).unwrap();
16    let result = program.eval(&activation);
17    println!("filter(x, x > 3): {}", result);
18
19    // Map: double each value
20    let ast = env.compile("numbers.map(x, x * 2)").unwrap();
21    let program = env.program(&ast).unwrap();
22    let result = program.eval(&activation);
23    println!("map(x, x * 2):    {}", result);
24
25    // Exists: any value > 7?
26    let ast = env.compile("numbers.exists(x, x > 7)").unwrap();
27    let program = env.program(&ast).unwrap();
28    let result = program.eval(&activation);
29    println!("exists(x, x > 7): {}", result);
30
31    // All: all values > 0?
32    let ast = env.compile("numbers.all(x, x > 0)").unwrap();
33    let program = env.program(&ast).unwrap();
34    let result = program.eval(&activation);
35    println!("all(x, x > 0):    {}", result);
36
37    // Size
38    let ast = env.compile("numbers.size()").unwrap();
39    let program = env.program(&ast).unwrap();
40    let result = program.eval(&activation);
41    println!("size():           {}", result);
42
43    // Contains (using 'in' operator)
44    let ast = env.compile("5 in numbers").unwrap();
45    let program = env.program(&ast).unwrap();
46    let result = program.eval(&activation);
47    println!("5 in numbers:     {}", result);
48}