{{ title }}
#| #|{% if draft %}draft
{% endif %} #|{{ body | safe }}
#|///|
fn main {
let head =
#|
#|
#|
#|{{ title }} - {{ site_name }}
#|{{ site_name }}
#|{% include "nav" %}
let nav =
#|
let footer =
#|
#|
let post_body =
#|{% include "head" %}
#|{{ title }}
#|
#|{% if draft %}draft
{% endif %}
#|{{ body | safe }}
#|
#|{% include "footer" %}
let archive_body =
#|{% include "head" %}
#|Posts
#|{% for post in posts %}
#|{% if not post.draft %}
#| {{ post.title }}
#|
#| {{ post.summary }}
#|
#|{% endif %}
#|{% endfor %}
#|{% include "footer" %}
let engine = @mold.Engine::new()
.with_autoescape(true)
.with_loader(fn(name) {
match name {
"head" => Some(head)
"nav" => Some(nav)
"footer" => Some(footer)
"post" => Some(post_body)
"archive" => Some(archive_body)
_ => None
}
})
let posts = @mold.array([
@mold.object({
"title": @mold.string("Hello, mold"),
"date": @mold.string("2026-05-28"),
"draft": @mold.bool(false),
"body": @mold.string("Hello world
"),
"summary": @mold.string("First post."),
}),
@mold.object({
"title": @mold.string("template composition"),
"date": @mold.string("2026-05-27"),
"draft": @mold.bool(false),
"body": @mold.string("Compose
"),
"summary": @mold.string("How to compose."),
}),
@mold.object({
"title": @mold.string("Draft"),
"date": @mold.string("2026-05-29"),
"draft": @mold.bool(true),
"body": @mold.string("Hidden
"),
"summary": @mold.string("Draft."),
}),
])
let output = try {
let post_tpl = engine.parse("{% include \"post\" %}")
let archive_tpl = engine.parse("{% include \"archive\" %}")
let builder = StringBuilder::new(size_hint=3000)
builder.write_string(
post_tpl.render(
@mold.object({
"site_name": @mold.string("My Site"),
"title": @mold.string("Hello, mold"),
"date": @mold.string("2026-05-28"),
"draft": @mold.bool(false),
"body": @mold.string("Hello world
"),
}),
),
)
builder.write_string("\n")
builder.write_string(
archive_tpl.render(
@mold.object({
"site_name": @mold.string("My Site"),
"title": @mold.string("Posts"),
"posts": posts,
}),
),
)
builder.to_string()
} catch {
_ => "render failed"
}
println(output)
}