74 lines
2.4 KiB
Rust
74 lines
2.4 KiB
Rust
// examples/with_variables.rs
|
|
use steel_decimal::SteelDecimal;
|
|
use steel::steel_vm::engine::Engine;
|
|
use std::collections::HashMap;
|
|
|
|
fn main() {
|
|
// Create variables
|
|
let mut variables = HashMap::new();
|
|
variables.insert("price".to_string(), "29.99".to_string());
|
|
variables.insert("quantity".to_string(), "5".to_string());
|
|
variables.insert("tax_rate".to_string(), "0.08".to_string());
|
|
|
|
// Create Steel Decimal with variables
|
|
let steel_decimal = SteelDecimal::with_variables(variables);
|
|
|
|
// Script using variables
|
|
let script = "(+ (* $price $quantity) (* (* $price $quantity) $tax_rate))";
|
|
let transformed = steel_decimal.transform(script);
|
|
|
|
println!("Original script: {}", script);
|
|
println!("Transformed script: {}", transformed);
|
|
|
|
// Create VM and register functions
|
|
let mut vm = Engine::new();
|
|
steel_decimal.register_functions(&mut vm);
|
|
|
|
// Execute the script
|
|
match vm.compile_and_run_raw_program(transformed) {
|
|
Ok(results) => {
|
|
if let Some(last_result) = results.last() {
|
|
println!("Total with tax: {:?}", last_result);
|
|
}
|
|
}
|
|
Err(e) => {
|
|
println!("Error: {}", e);
|
|
}
|
|
}
|
|
|
|
// Demonstrate adding variables dynamically
|
|
let mut steel_decimal = SteelDecimal::new();
|
|
steel_decimal.add_variable("x".to_string(), "10.5".to_string());
|
|
steel_decimal.add_variable("y".to_string(), "20.3".to_string());
|
|
|
|
let simple_script = "(+ $x $y)";
|
|
println!("\nSimple script: {}", simple_script);
|
|
|
|
match steel_decimal.parse_and_execute(simple_script) {
|
|
Ok(results) => {
|
|
if let Some(last_result) = results.last() {
|
|
println!("Simple result: {:?}", last_result);
|
|
}
|
|
}
|
|
Err(e) => {
|
|
println!("Error: {}", e);
|
|
}
|
|
}
|
|
|
|
// Show variable validation
|
|
println!("\nVariable validation:");
|
|
match steel_decimal.validate_script("(+ $x $y)") {
|
|
Ok(()) => println!("Script is valid"),
|
|
Err(e) => println!("Script error: {}", e),
|
|
}
|
|
|
|
match steel_decimal.validate_script("(+ $x $undefined_var)") {
|
|
Ok(()) => println!("Script is valid"),
|
|
Err(e) => println!("Script error: {}", e),
|
|
}
|
|
|
|
// Extract dependencies
|
|
let dependencies = steel_decimal.extract_dependencies("(+ $x $y $z)");
|
|
println!("Dependencies: {:?}", dependencies);
|
|
}
|