src/lightspeed@component.erl

-module(lightspeed@component).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/component.gleam").
-export([html/1, to_html/1, fingerprint/1]).
-export_type([rendered/0, command/1, component/2]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(" Component contract for Lightspeed applications.\n").

-type rendered() :: {rendered, binary(), binary()}.

-type command(HJX) :: no_command |
    {dispatch, HJX} |
    {push, lightspeed@agent@isa:instruction()}.

-type component(HJY, HJZ) :: {component,
        fun(() -> HJY),
        fun((HJY, HJZ) -> {HJY, list(command(HJZ))}),
        fun((HJY) -> rendered())}.

-file("src/lightspeed/component.gleam", 30).
?DOC(" Construct rendered HTML with a development fingerprint.\n").
-spec html(binary()) -> rendered().
html(Markup) ->
    {rendered, Markup, <<"dev"/utf8>>}.

-file("src/lightspeed/component.gleam", 35).
?DOC(" Extract HTML from a rendered value.\n").
-spec to_html(rendered()) -> binary().
to_html(Rendered) ->
    erlang:element(2, Rendered).

-file("src/lightspeed/component.gleam", 40).
?DOC(" Extract the static-shape fingerprint from a rendered value.\n").
-spec fingerprint(rendered()) -> binary().
fingerprint(Rendered) ->
    erlang:element(3, Rendered).