Current section
Files
Jump to
Current section
Files
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(GOX) :: {state,
gleam@string_builder:string_builder(),
gleam@string_builder:string_builder(),
list(event_state(GOX))}.
-type event_state(GOY) :: {event_state, binary(), binary(), GOY}.
-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(GPG))) -> state(GPG).
body_only(Body, Events) ->
{state, gleam@string_builder:new(), Body, Events}.
-spec append(state(GPK), state(GPK)) -> state(GPK).
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(GPO)) -> state(GPO).
headify(State) ->
head_only(erlang:element(3, State)).