Current section

Files

Jump to
nakai src nakai@render@state.erl
Raw

src/nakai@render@state.erl

-module(nakai@render@state).
-compile(no_auto_import).
-export([new/0, head_only/1, body_only/2, append/2, headify/1]).
-export_type([state/1, event_state/1]).
-type state(GTT) :: {state,
gleam@string_builder:string_builder(),
gleam@string_builder:string_builder(),
list(event_state(GTT))}.
-type event_state(GTU) :: {event_state, binary(), binary(), GTU}.
-spec new() -> state(any()).
new() ->
{state, gleam@string_builder:new(), gleam@string_builder:new(), []}.
-spec head_only(gleam@string_builder:string_builder()) -> state(any()).
head_only(Head) ->
{state, Head, gleam@string_builder:new(), []}.
-spec body_only(gleam@string_builder:string_builder(), list(event_state(GUC))) -> state(GUC).
body_only(Body, Events) ->
{state, gleam@string_builder:new(), Body, Events}.
-spec append(state(GUG), state(GUG)) -> state(GUG).
append(Before, Add) ->
{state,
gleam@string_builder:append_builder(
erlang:element(2, Before),
erlang:element(2, Add)
),
gleam@string_builder:append_builder(
erlang:element(3, Before),
erlang:element(3, Add)
),
gleam@list:append(erlang:element(4, Before), erlang:element(4, Add))}.
-spec headify(state(GUK)) -> state(GUK).
headify(State) ->
head_only(erlang:element(3, State)).