-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 unwrap_template(template()) -> list(handles@internal@parser:ast()). unwrap_template(Template) -> {template, Ast} = Template, Ast. -spec prepare(binary()) -> {ok, template()} | {error, handles@error:tokenizer_error()}. prepare(Template) -> _pipe = handles@internal@tokenizer:run(Template), _pipe@1 = gleam@result:'try'( _pipe, fun(_capture) -> handles@internal@parser:run(_capture) end ), gleam@result:map(_pipe@1, fun(Field@0) -> {template, Field@0} end). -spec run(template(), handles@ctx:value(), list({binary(), template()})) -> {ok, gleam@string_builder:string_builder()} | {error, handles@error:runtime_error()}. run(Template, Ctx, Partials) -> _pipe = Partials, _pipe@1 = gleam@list:map( _pipe, fun(_capture) -> gleam@pair:map_second(_capture, fun unwrap_template/1) end ), _pipe@2 = maps:from_list(_pipe@1), handles@internal@engine:run(unwrap_template(Template), Ctx, _pipe@2).