Packages

Handles is a templating language written in pure Gleam. Heavily inspired by Mustache and Handlebars.js

Current section

Files

Jump to
handles src handles.erl
Raw

src/handles.erl

-module(handles).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([prepare/1, run/3]).
-export_type([template/0]).
-opaque template() :: {template, list(handles@internal@parser:ast())}.
-spec prepare(binary()) -> {ok, template()} |
{error, handles@error:tokenizer_error()}.
prepare(Template) ->
_pipe = handles@internal@tokenizer:run(Template, 0, []),
gleam@result:map(
_pipe,
fun(Tokens) ->
Ast = handles@internal@parser:run(Tokens, []),
{template, Ast}
end
).
-spec run(template(), handles@ctx:value(), list({binary(), template()})) -> {ok,
binary()} |
{error, handles@error:runtime_error()}.
run(Template, Ctx, Partials) ->
{template, Ast} = Template,
Partials_dict = begin
_pipe = Partials,
_pipe@1 = maps:from_list(_pipe),
gleam@dict:map_values(
_pipe@1,
fun(_, Template@1) ->
{template, Ast@1} = Template@1,
Ast@1
end
)
end,
handles@internal@engine:run(
Ast,
Ctx,
Partials_dict,
gleam@string_builder:new()
).