use std::collections::HashMap; use std::error::Error; use std::fs::File; use std::io::Write; use tempfile::NamedTempFile; use sal::text::TemplateBuilder; fn main() -> Result<(), Box> { // Create a temporary template file for our examples let temp_file = NamedTempFile::new()?; let template_content = "Hello, {{ name }}! Welcome to {{ place }}.\n\ {% if show_greeting %}Glad to have you here!{% endif %}\n\ Your items:\n\ {% for item in items %} - {{ item }}{% if not loop.last %}\n{% endif %}{% endfor %}\n"; std::fs::write(temp_file.path(), template_content)?; println!("Created temporary template at: {}", temp_file.path().display()); // Example 1: Simple variable replacement println!("\n--- Example 1: Simple variable replacement ---"); let mut builder = TemplateBuilder::open(temp_file.path())?; builder = builder .add_var("name", "John") .add_var("place", "Rust") .add_var("show_greeting", true) .add_var("items", vec!["apple", "banana", "cherry"]); let result = builder.render()?; println!("Rendered template:\n{}", result); // Example 2: Using a HashMap for variables println!("\n--- Example 2: Using a HashMap for variables ---"); let mut vars = HashMap::new(); vars.insert("name", "Alice"); vars.insert("place", "Template World"); let mut builder = TemplateBuilder::open(temp_file.path())?; builder = builder .add_vars(vars) .add_var("show_greeting", false) .add_var("items", vec!["laptop", "phone", "tablet"]); let result = builder.render()?; println!("Rendered template with HashMap:\n{}", result); // Example 3: Rendering to a file println!("\n--- Example 3: Rendering to a file ---"); let output_file = NamedTempFile::new()?; let mut builder = TemplateBuilder::open(temp_file.path())?; builder = builder .add_var("name", "Bob") .add_var("place", "File Output") .add_var("show_greeting", true) .add_var("items", vec!["document", "spreadsheet", "presentation"]); builder.render_to_file(output_file.path())?; println!("Template rendered to file: {}", output_file.path().display()); // Read the output file to verify let output_content = std::fs::read_to_string(output_file.path())?; println!("Content of the rendered file:\n{}", output_content); Ok(()) }