A Jinja-style runtime template engine for MoonBit
moon add ZSeanYves/moonjinja@0.2.1import {
"ZSeanYves/moonjinja",
}fn render_page() -> String raise Error {
let environment = @moonjinja.Environment::new()
environment.set_options(
@moonjinja.RenderOptions::default().with_autoescape(true),
)
environment.add_template(
"hello.html",
"Hello {{ user.name | upper }}!",
)
environment.render("hello.html", {
"user": { "name": "MoonBit" },
})
}moon run src/examples/basiclet environment = @moonjinja.Environment::new()
environment.set_loader(name => {
match name {
"layout.html" => Ok("<{% block body %}{% endblock %}>")
"page.html" => Ok(
"{% extends \"layout.html\" %}" +
"{% block body %}{{ message }}{% endblock %}",
)
_ => Err("template not found: " + name)
}
})
let output = environment.render("page.html", { "message": "Ready" })environment.add_filter("surround", (value, args) => {
let marker = match args {
[first, ..] => first.to_display_string()
[] => "*"
}
Ok(@moonjinja.Value::StrValue(
marker + value.to_display_string() + marker,
))
})
environment.add_function("answer", _ =>
Ok(@moonjinja.Value::IntValue(42)))
environment.add_test("positive", (value, _) =>
match value {
@moonjinja.Value::IntValue(number) => Ok(number > 0)
_ => Err("positive expects an integer")
})moon fmt --check
moon check --target all --deny-warn
moon test --target all --deny-warn
moon bench --target native --release --deny-warnpub(all) suberror JinjaError {
LexerError(String)
ParseError(String)
RenderError(String)
}pub struct CompiledTemplate {
// private fields
}fn[T : ToJson] CompiledTemplate::render(self : CompiledTemplate, value : T) -> String raise JinjaErrorfn CompiledTemplate::render_json_to(self : CompiledTemplate, value : Json, write : (String) -> Unit) -> Unit raise JinjaErrorfn[T : ToJson] CompiledTemplate::render_to(self : CompiledTemplate, value : T, write : (String) -> Unit) -> Unit raise JinjaErrorpub struct Environment {
// private fields
}fn Environment::add_context_filter(self : Environment, name : String, filter : (ExtensionContext, Value, Array[Value], Map[String, Value]) -> Result[Value, String]) -> Unitfn Environment::add_context_function(self : Environment, name : String, function : (ExtensionContext, Array[Value], Map[String, Value]) -> Result[Value, String]) -> Unitfn Environment::add_context_test(self : Environment, name : String, test_function : (ExtensionContext, Value, Array[Value], Map[String, Value]) -> Result[Bool, String]) -> Unitfn Environment::add_filter(self : Environment, name : String, filter : (Value, Array[Value]) -> Result[Value, String]) -> Unitfn Environment::add_function(self : Environment, name : String, function : (Array[Value]) -> Result[Value, String]) -> Unitfn Environment::add_template(self : Environment, name : String, source : String) -> Unit raise JinjaErrorfn Environment::add_test(self : Environment, name : String, test_function : (Value, Array[Value]) -> Result[Bool, String]) -> Unitfn Environment::get_template(self : Environment, name : String) -> CompiledTemplate raise JinjaErrorfn[T : ToJson] Environment::render(self : Environment, name : String, value : T) -> String raise JinjaErrorfn Environment::set_versioned_loader(self : Environment, loader : (String) -> Result[(String, String), String]) -> Unitpub struct ErrorDiagnostic {
// private fields
}pub struct ExtensionContext {
// private fields
}pub struct RenderOptions {
// private fields
}fn RenderOptions::with_compile_limits(self : RenderOptions, max_template_size : Int, max_range_size : Int) -> RenderOptionsfn RenderOptions::with_features(self : RenderOptions, macros : Bool, multi_template : Bool, loop_controls : Bool) -> RenderOptionsfn RenderOptions::with_limits(self : RenderOptions, fuel : Int, max_recursion : Int, max_output_size : Int) -> RenderOptionsfn RenderOptions::with_structural_limits(self : RenderOptions, max_parse_depth : Int, max_include_depth : Int) -> RenderOptionsfn RenderOptions::with_whitespace_control(self : RenderOptions, trim_blocks : Bool, lstrip_blocks : Bool) -> RenderOptionsA Jinja-style runtime template engine for MoonBit