render_email/
render_email.rs

1use tera::Context;
2use terarium::{Content, Template, TemplateGroupBuilder, TerariumBuilder};
3
4/// The Terarium can create logical template groups and render them together,
5fn main() {
6    let mut builder = TerariumBuilder::default();
7
8    builder.add_template(
9        "greet_subject".to_owned(),
10        Template::new(vec![
11            Content::new("Greetings from {{sender}}".to_owned(), vec!["en".to_owned()]),
12            Content::new("Pozdrav od {{sender}}".to_owned(), vec!["cs".to_owned()]),
13        ]).unwrap(),
14    ).unwrap();
15    builder.add_template(
16        "greet_text".to_owned(),
17        Template::new(vec![
18            Content::new("Hello {{username}}".to_owned(), vec!["en".to_owned()]),
19            Content::new("Nazdar {{username}}".to_owned(), vec!["cs".to_owned()]),
20        ]).unwrap(),
21    ).unwrap();
22    builder.add_template(
23        "greet_html".to_owned(),
24        Template::new(vec![
25            Content::new("<p>Hello {{username}}</p>".to_owned(), vec!["en".to_owned()]),
26            Content::new("<p>Nazdar {{username}}</p>".to_owned(), vec!["cs".to_owned()]),
27        ]).unwrap()
28    ).unwrap();
29
30    builder.add_group(
31        "greet_email".to_string(),
32        TemplateGroupBuilder::default()
33            .add_member("subject".to_owned(), "greet_subject".to_owned())
34            .add_member("text".to_owned(), "greet_text".to_owned())
35            .add_member("html".to_owned(), "greet_html".to_owned())
36            .build(),
37    ).unwrap();
38    let terarium = builder.build().unwrap();
39
40    let mut ctx = Context::new();
41    ctx.insert("sender", "Jara Cimrman");
42    ctx.insert("username", "Karel Capek");
43
44    let rendered_group_en = terarium.render_group(&ctx, "greet_email", "en", None).unwrap();
45    let rendered_group_cs = terarium.render_group(&ctx, "greet_email", "cs", None).unwrap();
46
47    println!("\nEnglish");
48    println!("=======\n");
49    rendered_group_en.iter().for_each(|(member_key, content)| println!("{}: {}", member_key, content));
50
51    println!("\nCzech");
52    println!("=====\n");
53    rendered_group_cs.iter().for_each(|(member_key, content)| println!("{}: {}", member_key, content));
54}