Skip to main content

expressions/
expressions.rs

1/// Evaluate specific expressions within a module.
2use pklrust::{EvaluatorManager, EvaluatorOptions, ModuleSource};
3
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5    let mut manager = EvaluatorManager::new()?;
6    let evaluator = manager.new_evaluator(EvaluatorOptions::preconfigured())?;
7
8    let source = ModuleSource::text(
9        r#"
10        name = "my-app"
11        port = 8080
12        url = "http://localhost:\(port)"
13        hosts = new Listing { "web-1"; "web-2"; "web-3" }
14        "#,
15    );
16
17    // Evaluate the whole module
18    let full = manager.evaluate_module(&evaluator, source.clone())?;
19    println!("Full module:\n{full:#?}\n");
20
21    // Evaluate a single expression
22    let name = manager.evaluate_expression(&evaluator, source.clone(), Some("name"))?;
23    println!("name = {name:?}");
24
25    let url = manager.evaluate_expression(&evaluator, source.clone(), Some("url"))?;
26    println!("url = {url:?}");
27
28    let hosts = manager.evaluate_expression(&evaluator, source, Some("hosts"))?;
29    println!("hosts = {hosts:?}");
30
31    manager.close_evaluator(&evaluator)?;
32    Ok(())
33}