66 lines
2.4 KiB
Rust
66 lines
2.4 KiB
Rust
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<dyn Error>> {
|
|
// 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(())
|
|
} |