use tron::{TronTemplate, TronRef, TronError, Result};
fn main() -> Result<()> {
println!("=== Tron Basic Usage Example ===\n");
example_simple_template()?;
example_multiple_placeholders()?;
example_template_ref()?;
example_error_handling();
Ok(())
}
fn example_simple_template() -> Result<()> {
println!("1. Simple Template:");
let mut template = TronTemplate::new("Hello @[name]@!")?;
template.set("name", "World")?;
let result = template.render()?;
println!(" Input: \"Hello @[name]@!\"");
println!(" Output: \"{}\"", result);
println!();
Ok(())
}
fn example_multiple_placeholders() -> Result<()> {
println!("2. Multiple Placeholders:");
let mut template = TronTemplate::new(
"fn @[function_name]@(@[params]@) -> @[return_type]@ {\n @[body]@\n}"
)?;
template.set("function_name", "calculate_sum")?;
template.set("params", "a: i32, b: i32")?;
template.set("return_type", "i32")?;
template.set("body", "a + b")?;
let result = template.render()?;
println!(" Generated Rust function:");
println!("{}", result);
println!();
Ok(())
}
fn example_template_ref() -> Result<()> {
println!("3. Template Reference with Dependencies:");
let template = TronTemplate::new(
"use serde::{{Serialize, Deserialize}};\n\n#[derive(Serialize, Deserialize)]\npub struct @[struct_name]@ {\n @[fields]@\n}"
)?;
let template_ref = TronRef::new(template)
.with_dependency("serde = { version = \"1.0\", features = [\"derive\"] }");
let mut template_ref = template_ref;
template_ref.set("struct_name", "User")?;
template_ref.set("fields", "pub name: String,\n pub email: String,\n pub age: u32,")?;
let result = template_ref.render()?;
println!(" Generated Rust struct with dependencies:");
println!("{}", result);
println!(" Dependencies: {:?}", template_ref.dependencies());
println!();
Ok(())
}
fn example_error_handling() {
println!("4. Error Handling:");
let mut template = TronTemplate::new("Hello @[name]@!").unwrap();
match template.render() {
Ok(_) => println!(" Unexpected success"),
Err(TronError::MissingPlaceholder(placeholder)) => {
println!(" ✓ Caught missing placeholder error for: '{}'", placeholder);
}
Err(e) => println!(" Unexpected error: {}", e),
}
match template.set("nonexistent", "value") {
Ok(_) => println!(" Unexpected success"),
Err(TronError::MissingPlaceholder(placeholder)) => {
println!(" ✓ Caught invalid placeholder error for: '{}'", placeholder);
}
Err(e) => println!(" Unexpected error: {}", e),
}
match TronTemplate::new("@[invalid name with spaces]@") {
Ok(_) => println!(" Unexpected success"),
Err(TronError::InvalidSyntax(msg)) => {
println!(" ✓ Caught invalid syntax error: {}", msg);
}
Err(e) => println!(" Unexpected error: {}", e),
}
println!();
}